0

Enterキーを押すまで数値を受け取る必要があります。scanfの戻り値をEOFと比較しようとしましたが、さらに数値を入力するように求められます(無限ループ):

int fail=0, late=0, avg=0, i=0, last=0, current, permission, difference;
while(scanf(" %d", &current) != EOF)
{
    permission = (current < last);
    difference = ((last - current) >= 30);
    fail += difference*permission;
    late += permission;
    avg += (last - current)*(permission);
    last = last*(permission) + current*(!permission);
}

助言がありますか。
ありがとう

4

3 に答える 3

0

ええと、scanf仕様は、空白文字を読み取って無視することを示しています。また、仕様では、データを正常に読み取る前に入力が失敗した場合にのみEOFが返されると規定されています。ここで自分で読むことができます。

他の回答で述べられているように、他の読み取り機能を使用することをお勧めします。それでも、そのscanfループで生きて死ぬ必要がある場合は、おそらく、下部に次のコードを追加できます。

if (getchar() == '\n') break;

入力が数字のみの場合は機能するはずであり、それを回避するための単なる方法です。

于 2012-05-06T01:57:11.713 に答える
0

あなたが抱えている問題の1つは、scanfのドキュメントに、ほとんどの形式変換で空白がスキップされると記載されていることです。(これには、キャリッジリターンと改行が含まれます。)

1つのオプションは、一度に1文字ずつ読み取り、いくつかの数字を作成することです。このようにして、偽の入力をキャッチできます。インライン空白(スペースとタブ)と行終了空白(CRとNL)を区別することもできます。

于 2012-05-05T20:20:59.313 に答える
0

Linuxを使用している場合は、次のように入力するとwhileループを停止できます。CTRL+D

EOF = CTRL+ D(Linuxの場合)

EOF = CTRL+ Z(Windowsの場合)

于 2012-12-31T13:41:33.460 に答える