簡體   English   中英

C程序不讀取輸入,不提供輸出

[英]C program doesn't read an input, doesn't give an output

我是C語言的新手,並從The C Programming Language一書中獲得了以下示例:

#include <stdio.h>

#define IN 1 /* inside a word */
#define OUT 0 /* outside a word */

/* count line and words and characters in input */

main()
{
    int c, nl, nw, nc, state;

    state = OUT;
    nl = nw = nc = 0;
    while ((c = getchar()) != EOF)  {
            ++nc;
            if (c == '\n')
                    ++nl;
            if ( c == ' ' || c == '\n' || c == '\t')
                    state = OUT;
            else if ( state == OUT) {
                    state = IN;
                    ++nw;
            }
    }
    printf("%d %d %d\n", nl, nw, nc);
}

該代碼在終端中可以使用以下命令編譯良好:gcc -o count count.c當我使用./count運行它時,讓我對其進行測試,並在輸入中輸入新行。 我輸入內容,點擊Return鍵,它為我的文本輸入提供了另一個空白行,但不輸出任何內容。 我做錯了什么? 我正在用輸入來做其他一些示例,但是正在接收輸出,但是本書中使用的所有代碼現在都不適用於我。 非常感謝。

值“ EOF”不等於換行符“ \\ n”。 “ EOF”是當您按ctrl + d,標准輸入(aka getchar())來自鍵盤或到達文件(如果您要從文件重定向標准輸入)時發送的值。使用./count <文件)。

假設您正在使用Ctrl-D,這是Linux的EOF字符。

代碼中的循環表示要進行迭代,直到讀取EOF(文件結束)字符為止。 如果使用Linux,則為Ctrl + D。 對於Windows,必須按Ctrl + Z並輸入鍵。

如果程序的預期結果是計算輸入中的行數,單詞和字符數,則重要的是應明確划定給定輸入的起點和終點。

在此特定程序中,輸入在while循環開始時開始(並且輸入字符不是EOF),輸入在輸入EOF字符時停止。

EOF的含義和用法必須清楚。

EOF是由流函數返回以指示文件結束條件的宏。 此符號在stdio.h中聲明。

比較形式時:

((c = getchar())!= EOF)

完成后,內部發生的是將“ c”中輸入的字符的ASCII值與EOF的ASCII值進行比較。

輸入輸入后,單擊“返回”。 “返回”對應於換行換行符,其ASCII值為10(十進制)。 ASCII中的EOF對應於傳輸結束,並且具有ASCII值4(十進制)。

因此,如果您在輸入后一直按“ Return”,則程序將無限期期待輸入。 為了指示輸入結束,必須輸入EOF。 EOF對應於Ctrl-D(ASCII值4)。

綜上所述,您的程序沒有任何問題。 您所要做的就是在輸入的末尾,而不是按“ Return”,而是執行Control-D。

嗯,我愛K&R。 之前有這個問題,需要結尾。 作為Ctrl + d,您可以嘗試: 。/計數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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