2012-05-24 50 views
1

我已經在C中編寫了一個程序來統計stdin的字符輸入。我想用循環來允許多個條目。 (注:我是編程新手。)爲什麼第一次輸入後字符數錯誤?

main() 
{ 
    long nc; 
    int c; 
    int kc=1; 
    for (kc=1;kc<=5;kc=kc+1) 
    { 
     nc=0; 
     c= getchar(); 
     while(c != '0') 
     { 

     ++nc; 
     c=getchar(); 
     } 

     printf("%1d\n",nc); 

    } 
    return 0; 
} 

所以基本上你可能會猜到,循環接受5個條目。

問題:當我輸入Sky0時,第一個結果是正確的,但是從那時起,一個被添加到計數中。即在4等計數進入dame0導致的5計數,sit0結果

雖然試圖調試使用prinf在不同階段的問題,我意識到,第一個結果後的代碼發現的結束輸入0,但進入for循環NEVERTHELESS並等待nc的下一個輸入爲1。這會導致相應輸出中的錯誤。

請告訴我哪裏出錯了?爲什麼即使在感應0之後也會進入循環?

非常感謝您的幫助和時間:)

+0

'nc'在'for'循環的每次迭代中被設置爲'0'。當找到字符「0」時,while循環將被終止。我檢查了@aix的聲明,這是正確的,請參閱http://ideone.com/gw1ON。它顯示了換行符是後續輸入的一部分。 – hmjd

+0

是否有可能c =='0'?當c =='0'時,while循環將被終止。我每次都得到c = -1。 –

+0

你在說俚語嗎?請在編寫問題和縮進代碼時做出一些努力。其他人不會浪費時間閱讀它。 – Seki

回答

2

的問題是,當你按下回車,變成一個性格太(價值0X1A),它是由while循環外getchar調用返回。

你可以這樣做:

while (getchar() != '\n') nc++; 

這樣一來,你甚至都不需要用0來標記字符串的結束。

+0

是的,我糾正了它的隊友:)... thnks :) – Aki

+0

奧克...新的在這裏:)...會做... – Aki

相關問題