[英]Why is this not producing any output when using printf()?
目前,我正在研究K&R C,並且正在嘗試一個示例,其中程序將字符流作為輸入,然后打印該流中的字符數。
據我所知,這似乎沒有產生任何輸出:
main()
{
long nc;
nc = 0;
while (getchar() != EOF){
++nc;
}
printf("%1d\n", nc);
}
但這似乎很好,盡管與我想要的略有不同:
main()
{
long nc;
nc = 0;
while (getchar() != EOF){
++nc;
printf("%1d\n", nc);
}
}
任何指針將不勝感激。 提前致謝!
編輯
我嘗試使用ctrl z模擬EOF,但這似乎無法正常工作。 我正在Windows 7的cmd行上運行此命令,如果有任何區別的話。
您的程序運行正常。
您看不到輸出,因為您從未發送EOF
。 如果您在命令行上運行,請傳入一個文件:
./a.out <myfile.txt
(這也將在Windows上運行)
或者,如果您自己輸入內容,請輸入<return><ctrl-D><return>
發送EOF
。 (或Windows上的<return><ctrl-Z><return>
)
然后,這將按預期工作。
➤ cat try.c
#include <stdio.h>
main()
{
long nc;
nc = 0;
while (getchar() != EOF){
++nc;
}
printf("%1d\n", nc);
}
➤ gcc try.c -o try && ./try <try.c
131
這是與GnuCC的示例會話。
為了使getchar
返回EOF
您需要“關閉流/到達流的末尾”。 請參閱以下問題的答案: C:如何模擬EOF?
簡而言之:您需要將EOF發送到流(例如,在Windows上通過發送Ctrl + Z或在Linux上通過發送Ctrl + D)。 或者例如使用管道。 例如,將一個文件的內容管道傳輸到您的應用程序。 當第一個應用程序終止時,它會自動關閉流,因此您的應用程序將讀取EOF。
例如在Linux下:
$ cat some_file.txt | ./a.out
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.