簡體   English   中英

為什么在使用printf()時不產生任何輸出?

[英]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的示例會話。

control-Z與minGW合作

為了使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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM