天天看點

getchar()的一點思考

【熊貓大叔   轉載請注明出處:http://blog.csdn.net/pandaflyup】

今天看書看到一道題:驗證表達式getchar()!=EOF的值是0還是1。 于是乎我就編寫了下面一段程式:

int main()
{
int c;
while(c=getchar()!=EOF)//!=優先級大于=,驗證後邊式子的傳回值 
printf("不等于EOF時傳回值:%d\n",c);
printf("等于EOF時傳回值:%d\n",c);
system("PAUSE");
return 0;
} 
           

輸入字元‘a’回車,結果列印了兩行,也就是循環執行了兩次。

當時一愣,想着我輸入一個字元,不就該列印一行(執行一次嗎),怎麼執行了兩次,後來經過仔細推敲 加用别的程式驗證,發現回車(\n)也被當成了一次輸入,我平常都以為回車隻表示字元輸入的結束,其實 真相是回車也是一次輸入,隻不過是放在緩存中,當執行完第一個動作(輸入的a)再執行換行。

下面給出驗證程式:

int main()
{
long nc=0;
int c;
while((c=getchar())!=EOF)
{
            putchar(c);
   nc++;
         }
printf("the length is %d",nc);
system("PAUSE");
return 0;
} 
           

輸入字元‘a’,回車表示字元輸入結束,執行循環體,再ctrl+z(EOF)退出循環,此時列印出的長度是2, 說明回車也算成了一次輸入。

可能大家早已知道這個細節,隻是我平常沒有細細推敲導緻對問題一知半解,甚至根本不了解。是以再簡單 的程式也經不起推敲,還是有很多東西可以學。

繼續閱讀