2011-08-26 68 views
0

是代碼EOF和普通整數有什麼區別?下面

代碼:

#include <stdio.h> 



int main(void) 
{ 
    int ch; 

    while((ch = getchar()) != 'h') 
     putchar(ch); 


    return 0; 
} 

問題:

1)因此,像往常一樣我剛運行此代碼,由於好奇心當用於輸入程序提示,我插入^z(CTRL + Z)這是EOF (Windows 7 Command Prompt),但我得到的是無限循環的字符打印。

2.)從代碼,我的邏輯是,因爲我輸入^z到程序時,它只會評估邏輯(ch = getchar()) != 'h'和值true1將被返回,並且字符^z將被打印out.But代替不同結果就是收益率。

回答

2

當你按^Z,程序注意到輸入流已關閉,但你繼續使用getchar(),所以你得到EOF。這無限循環,因爲你不能再輸入'h'。需要注意的是只有'h'(不'A',不^M,也沒有^Z)可以停止程序,因爲你循環,如果你沒有得到一個「H」

換句話說,如果你想停止,如果輸入任何東西,但'h',然後做

do 
{ 
    ch = getchar(); 
    putchar(ch); 
} while (ch == 'h'); 
0

EOF 與實現定義負值的整數。你的代碼無限循環,因爲只有輸入'h'才能完成。但一旦它讀取EOF,即!= 'h',它將進入無限循環,因爲標準輸入已關閉,沒有任何東西可以使其返回其他任何內容。

1

EOF通常定義爲-1(但它是特定於實現的)。當你調用putchar(-1)時,它將被轉換爲無符號字符,併成爲值255,然後輸出(ÿ除非我錯了)。