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が入力されるというどちらかのバグが起きる結果になりました。
どなたかわかる方がいらっしゃいましたらコメントで指摘してもらえると嬉しいです。