c言語についての質問です

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
s

c言語についての質問です

#1

投稿記事 by s » 15年前

当方学び始めたばかりの初心者です。
少し詰まったところがあるのでご質問させていただきます。

「入力された値を足していき(複数)、『e』が入力されれば合計値を出力」
という仕様で


void main(void)
{
int a=0;
int b=0;
int e;
scanf("%d",&a);
while(a!=e)
{
b=b+a;
scanf("%d",&a);
}
printf("合計:%d\n",b);
}

というプログラムを組んだのですが、『e』を入力しても合計値が出力されません。
数字を入力せずに1度目に『e』を入力すれば終わるのですがそれでは意味がありませんし・・・

どこが間違ってるのかもよくわからないのでご指摘お願いします。

non

Re:c言語についての質問です

#2

投稿記事 by non » 15年前

scanf("%d",&a);
は数字を入力する書式指定です。
eは文字ですから、eを入力できるようにするなら、
まず、文字列で入力して、それを数値に変換するようにしないといけません。

御津凪

Re:c言語についての質問です

#3

投稿記事 by 御津凪 » 15年前

まず、
・変数 e が未初期化なので、処理自体正しく動きません。(VC++ では実行時エラーになりました)
・プログラム上に e が入力されたかを判別する処理がありません。
・ main 関数は int 型を返す関数でなければならない。(void は C 言語の仕様上正しくありません)

で、うまく動かない原因ですが、
・最初に e を入力したときに終了するのは、
e に(たまたま) 0 が入っており、
scanf では a には何も代入されず(入力したのは数字ではないので)、
結果 a と e は 0 なので、 while ループに入らないため。

・数値を入力した後に e を入力しても終了しないのは、
二度目以降の scanf では a には何も代入されず、
前の入力した数字のままのため、
a と e が不一致のままとなり、 while ループから出られない。
( e が 0 となっていたのなら、 0 を入力すると while ループから出ることになります)

scanf 関数は、変数に代入した個数が返されるので、変数 e を使わずに、
while(scanf("%d", &a) != 0)
と while 文に指定してしまえば、 e (というか数字以外)が入力されたら while から出るようになります。

Re:c言語についての質問です

#4

投稿記事 by » 15年前

nonさん
ありがとうございます。
今からその方向でも試して見ます。


御津凪さん
ありがとうございます。
e指定ではなく数字以外、を指定すればよかったんですね。


返事が遅れましたがご指摘いただきありがとうございました。
またよろしくお願いします。

閉鎖

“C言語何でも質問掲示板” へ戻る