2017-07-20 104 views
2

簡介: 我是C編程的初學者,我的指南推薦了Brain W. Kernighan的「The C Programming Language」。在閱讀這本書的時候,我遇到了一個並不像預期那樣工作的代碼。修改C代碼以處理提供的輸入

問題:即使在輸入我想要的文本後,控制檯仍在等待更多輸入。基本上,控制檯無法知道何時開始處理輸入。如果有人可以對代碼提出修改建議,這樣可以讓用戶指示編譯器開始處理已提供的輸入,這將非常有幫助。

代碼:

#include <stdio.h> 

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

    // program to count number of lines, words and characters in input 

int 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); 

} 

附加信息:
書:C程序設計語言 - 由Brian W. Kernighan的
章:入門教程(第20頁)
使用Xcode版本8.3.3(8E3004b)

+6

按Ctrl + Z(或Unix中的D)。或像'./your_program BLUEPIXY

+0

你應該真的得到一本新書。 C語言的一些語法自1988年以來已經發生了變化。 – stark

+0

@stark如果你能推薦一些涵蓋現代語法的其他書籍,我會很高興 –

回答

2

在類Unix系統上,如果在控制檯的行首鍵入CTRL-D,這與EOF(while循環中的條件)等效。如果您在Windows上,請改用CTRL-Z。

+0

我還是不明白一件事。只要按下Ctrl + D(EOF字符),就會打印輸出。這意味着代碼已經分析了EOF字符之前的所有輸入。所以基本上所有的工作都已經完成了,只要Ctrl + D被按下,輸出就被打印在已經處理過的屏幕上。是對的嗎? –

相關問題