1

関数の使用を含め、このコードのさまざまなバリエーションを試しましたがscanf、毎回 1 ポイントではなく 2 ポイントずつ増加します。コードは次のとおりです。

#include <stdio.h>
int main(void)
{
    double nc;
    for(nc = 0; getchar() != EOF; ++nc)
          printf("%.0f\n", nc);
}

これは私が得る出力です。使用した入力は qwerty で、出力は予想どおり 0 ~ 5 ではなく、0 ~ 11 の数字です。

q 
0
1
w
2
3
e
4
5
r
6
7
t
8
9
y
10 
11

私が考えていたのは、Enter キーを押すと、入力getcharした文字と一緒に値としてカウントされ、これによりループが 2 回繰り返されるということでした。誰かがこの概念をさらに説明したり、それに関する詳細情報へのリンクを提供したりできますか?

4

1 に答える 1

5

前の末尾の改行getcharは、次の入力として取り込まれますgetchar

だから使う、

   for(nc = 0; getchar() != EOF; ++nc)
      {
       printf("%.0f\n", nc);
       getchar(); //"eat" the trailing newline
      }
于 2013-09-15T06:44:32.410 に答える