auの日記

プログラミング初心者の日記。(auはハンドルネームです)

C言語で表を作ってみた

auです。
前回の続きになります。
program-shoshinsya.hatenablog.com

前回はうまくいかずちゃんと表記されませんでしたが今回はちゃんと表記されました。

#include <stdio.h>
#include <string.h>

int main(void) {
    int n = 0; // 件数
    int total = 0; // 合計売上
    int sale; // 売上
    int sale_t[20]; // 売上テーブル
    float per;
    char emp[256]; // 従業員
    char emp_t[20][30]; // 従業員テーブル

    printf("従業員名がendで終了する\n");
    printf("1人目の従業員名:", n + 1);
    scanf("%s", emp);
    printf("%sの売上: ", emp);
    scanf("%d", &sale);

    while (strcmp(emp, "end") != 0) {
        total += sale;
        n++;
        sale_t[n] = sale;
        strcpy(emp_t[n], emp);
        printf("%d人目の従業員名: ", n);
        scanf("%s", emp);
        if (strcmp(emp, "end") != 0) {
            printf("%sの売上: ", emp);
            scanf("%d", &sale);
        }
    }
    n++;
    sale_t[n] = total;
    strcpy(emp_t[n], "合計");
    printf("_____________\n");
    printf(" 担当者   売上   比率\n");
    printf("------------------------\n");
    for (int i = 1; i <= n; i++) {
        per = (float)sale_t[i] * 100.0 / (float)total;
        printf("  %s       %d     %.2f%\n", emp_t[i], sale_t[i], per);
    }
    printf("========================\n");
    return 0;
}

// 実行結果
従業員名がendで終了する
1人目の従業員名:佐藤
佐藤の売上: 2000
1人目の従業員名: 斎藤
斎藤の売上: 3000
2人目の従業員名: 加藤
加藤の売上: 1000
3人目の従業員名: end
_____________
 担当者   売上   比率
------------------------
  佐藤       2000     33.33%
  斎藤       3000     50.00%
  加藤       1000     16.67%
  合計       6000     100.00%
========================

前回とは違いちゃんと表記されました。
間違っていたのはemp_t(従業員テーブル)の配列を指定していないことでした。なので、emp_t[n]と書き換えてうまく動作するようになりました。
ですがまだ1つだけ間違えている個所があります。表記自体は問題ないのですが、"n人目の従業員名"の部分で"1人目"が2つ表記されていることです。いろいろいじってみたのですが、表記が

従業員名がendで終了する
1人目の従業員名: 佐藤
佐藤の売上: 300
2人目の従業員名: 加藤
加藤の売上: 500
3人目の従業員名: end
_____________
 担当者   売上   比率
------------------------
         0     0.00%
  佐藤       300     37.50%
  加藤       500     62.50%
  合計       800     100.00%
========================

となり、1人目の表記は大丈夫になるが、最初に0が入力されるというどちらかのバグが起きる結果になりました。
どなたかわかる方がいらっしゃいましたらコメントで指摘してもらえると嬉しいです。