次のプログラムで変数「nc」の値を出力しようとしています。
int main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc);
}
印刷されない理由を教えてください。
次のプログラムで変数「nc」の値を出力しようとしています。
int main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc);
}
印刷されない理由を教えてください。
whileループに角かっこがありません(これが角かっこを使用しないとエラーが発生しやすいソフトウェアになる理由です)。したがって、値は増分されますが、印刷されません。
試す:
int main(int argc, char** argv)
{
long nc;
nc = 0;
while (getchar() != EOF)
{ // ADD THIS
++nc;
printf("%ld\n", nc);
} // AND THIS
}
それ以外の場合、コードは基本的に次のことを実行します。
int main(int argc, char** argv)
{
long nc;
nc = 0;
while (getchar() != EOF)
{
++nc; // ENDLESSLY ADDING
}
printf("%ld\n", nc); // NEVER REACHED DUE TO WHILE LOOP.
}
whileループは、Unixの場合はControl-D、Windowsの場合はControl-Z、Returnを使用して入力を終了するまでループし続けます。++ ncとprintfの前後に中括弧を使用しなかったため、何も印刷せずにこれを実行します。
#include <stdio.h>
プログラムの先頭にいない場合は、printfで問題が発生する可能性もあります。コンパイラがprintfがvarargs関数であることを知らない場合、それを呼び出すときに引数リストを正しくフォーマットしません。
次のような入力を入力した後
1
2
4
uctrl + D
はEOFASCII
に相当するので入力する必要があります。
それ以外の場合は、プログラムを変更して配置します
while(getchar()!='\ r')(ヒットするまで
Enter
)
どう言う意味ですか?できます:
./a.out
asdfsdfasdfasdfasddddddddddddddddddddddd
41
echo "Try to count this" | ./a.out
18
getcharのwhileループを停止して、stdinからの文字の読み取りを停止する必要があります
次に、nc値が出力されます
する
EOF
= CTRL+ D(Linuxの場合)
EOF
= CTRL+ Z(Windowsの場合)