我的問題很簡單:「爲什麼我的第10和11行代碼無法正常工作?」我的代碼的預期目的是完全按照原始的K & R代碼的意圖執行,但是不論何時(getchar()=='\ n')都不計算nc,您能否給我提供啓發?C編程 - K&R示例1.5.2 - 修改後的程序無法按預期運行[解決]
略微改進的K & R代碼裏面:
/** K&R - 1.5.2 Character Counting **/
#include <stdio.h>
/* count characters in input; 1st version */
main(){
long nc;
nc = 0;
while (getchar() != EOF){
if (getchar() != '\n'){
++nc;
}
}
printf("%ld\n", nc);
}
我使用64位Windows 7,CodeBlocks10.05,GNU GCC編譯器。
我目前的進展和認識:
在樣品上來看,我的字two
鍵入並回車,相當於4個輸入,在這之後我按CTRL + Z在^Z
或EOF字符輸入。該程序然後打印1
。我期待它打印3
。我想唯一合乎邏輯的解釋是,它與我的意圖完全相反(只有計算換行符?)。事實證明,如果我輸入單詞two
並按下回車鍵,讓我們說4次,它會打印4
。對於輸入的每一個換行符,似乎都計數爲nc
,但是如果我單獨按下輸入(在這種情況下是4次)然後輸入EOF,它總是會輸出0
。經過進一步的實驗,通過一些看不見的東西4也許是這個計劃的一個神奇數字。如果我啓動它並準確地按下確定鍵(一個可以被4整除的數字)然後EOF它會打印0
。但是,如果我輸入一些其他次數的EOF什麼也不做,並且我必須一個接一個地輸入^Z
兩行,以正確結束while循環,並且它打印1
。這讓我難以置信!
附近放置括號謝謝你對char類型的傑出解釋 –