【熊貓大叔 轉載請注明出處: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, 說明回車也算成了一次輸入。
可能大家早已知道這個細節,隻是我平常沒有細細推敲導緻對問題一知半解,甚至根本不了解。是以再簡單 的程式也經不起推敲,還是有很多東西可以學。