2013-01-14 119 views
0

因爲我們必須使用scanf,所以我使用scanf。 問題如下: (那只是問題的一個例子):scanf(%s)EOF問題

int main() { 
     char ch [10]={0}; 
     scanf("%s",ch); 

     printf("%s",ch); 
    } 

如果我運行該程序,並且例如輸入:字^ Z 當^ Z是EOF。 該程序保持原位,卡在scanf中,我也沒有輸入單詞,然後ctrl + z然後回車。但它以某種方式保留在scanf中,它與重定向一樣,就像它不是ctr + z或任何其他問題一樣。

我希望我能得到一些幫助

在此先感謝, 完全apprecaite吧:)

+2

哪個操作系統?^D是Linux上的EOF,^ Z是Windows上的EOF。 – Ryan

+0

窗口,^ Z始終是eof,它的工作原理是,除了scanf%s –

回答

2

scanf使用空格作爲分隔符來讀取數據存儲到各個領域。通過命令行,在進入控制Ž,然後輸入只放EOF字符到輸入流和scanf()繼續等待空格。如果您再次輸入輸入,則scanf將收到空格字符,並且包括EOF在內的所有內容都將存儲在ch陣列中。

下面是一個示例運行。第一行是輸入,第二行是輸出。

Hello^Z 
Hello→ 
+0

但是這個箭頭是什麼東西? 另外我試着用getchar,我把while(c!= EOF)c = getchar(); 如果c == EOF,它應該返回0,我繼續並輸入字符如abc^Z 然後它只是不去EOF,很奇怪? –

+0

好吧,顯然EOF是一個不可打印的字符,但是因爲你已經把它放到一個char數組中,它必須作爲字符串的一部分被打印出來。這是箭頭的事情。 –

+0

'getchar()'返回int來容納'EOF'。如果將返回的值作爲字符進行比較,它將永遠不會匹配「EOF」。嘗試將其比較爲一個整數,它應該工作。 –