※ ChatGPTを利用し、要約された質問です(原文:プログラム問題(3))
問題のプログラムを実行する際のエラーについて
このQ&Aのポイント
問題のプログラムを実行する際にエラーが発生します。エラーの原因としては、数値以外の入力や入力文字列が空の場合にエラーメッセージを出力してプログラムを終了させています。
プログラムは、3桁の整数の値を入力するまで繰り返し入力を受け付けます。入力が-9999の場合に入力を終了し、それまでの入力数、合計、平均を出力します。
プログラムの問題点としては、入力値が数値以外の場合や空文字列の場合にエラーメッセージを表示してプログラムを終了させてしまうことです。正しい入力ができない場合には繰り返し入力を受け付けるように修正する必要があります。
以下の問題のプログラムをやったのですが、コマンドプロンプトで実行してみるとエラーになってしまうのですが、どなたか問題点を指摘していただけないでしょうか?
【問題】
3桁の整数の値を入力していき、-9999が入力されたところで、それまでに入力された数の個数と合計を整数で、平均を浮動小数点数で出力するプログラム。
【プログラム】
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define streq(a, b) !strcmp((a), (b))
int
main(int argc, char *argv[])
{
int i, num, sum = 0;
double avg;
char buf[256];
char *endptr;
for (i = 0;; i++) {
printf("INPUT>");
if (fgets(buf, sizeof buf, stdin) == NULL) {
perror("fgets");
exit(1);
}
if (streq(buf, "-9999") || streq(buf, "-9999\n")) {
break;
}
if (streq(buf, "") || streq(buf, "\n")) {
fprintf(stderr, "数値を入力してください。\n");
exit(1);
}
num = (int) strtol(buf, &endptr, 0);
if (! (*endptr == '\n' || *endptr == '\0')) {
fprintf(stderr, "数値を入力してください。\n");
exit(1);
}
sum += num;
}
printf("入力数:%d 合計:%d 平均:%g\n", i, sum, (double) sum / i);
return 0;
}