2016-09-08 79 views
-1
printf("hello2"); 
int i = 0; 
int done = 0; 

while (!done) 
{ 
    char c; 
    printf("hello3"); 
    c = getc(stdin); 
    printf("hello4"); 
    if (isspace(c)) 
    { 
     done = 1; 
     ungetc(c, stdin); 
     printf("hello5"); 
    } 
} 

所以我的程序當前正在嘗試讀取輸入(在這種情況下,特別是一個空輸入)。但是,在我發現我的程序不起作用後,我試着通過散佈printfs來調試它,在我看來,在c = getc(stdin)之後,程序停止工作?如果我的理論是正確的,那麼使用c = getc(stdin)有什麼問題?程序在getc(stdin)後停止工作

+1

通過爲每個打印的字符串附加一個'\ n'確保輸出被刷新。沒有足夠的代碼來辨別問題。 – chux

+0

請注意,'getc()'返回一個'int',通常有257個不同的值'EOF'和'unsigned char'範圍內的值。 – chux

+0

嘗試在每次調用printf()後使用'fflush(stdout);'來確定應該打印什麼。 – MikeCAT

回答

0

您是否試過在空格後進入?除非你做了特定的安排,否則你的終端仿真或者你運行程序的任何地方都不會給你輸入的每個鍵盤字符。它會一直等到你輸入,然後讓你完成所寫的全部內容。

0

Stdin不會將輸入字符刷新到輸入流中,直到換行符「\ n」。所以getc(stdin)沒有任何可讀的內容,除非你按回車。如果您想在不敲回車的情況下閱讀控制檯輸入,則可以在Windows編譯器提供的conio.h庫中使用getch()函數。 getch()從stdin中讀取一個字符而不等待換行符。