2013-12-23 61 views
1
while(1) 
{ 
    if(i == 6) 
     break; 
    temp[i] = getchar(); 
    putchar(temp[i]); 
    i++; 
} 

每當我不得不以這種方式使用的getchar讀取輸入,它也接受輸入的輸入之一,因此我很內斂爲什麼採取的getchar作爲一個輸入進入只有三個字符,而不是6。輸入?如何避免這種情況?從getchar函數

輸入:

1 
2 
3 

這個循環場所後,因爲三個返回按壓被認爲是三個輸入到溫度[1],溫度[3]和溫度[5]。

回答

9

getchar一次讀取一個字符。按輸入密鑰,您正在將新行字符\n傳遞給C標準緩衝區,在下一次調用getchar時也會讀取getchar。爲了避免這種\n字符,你可以試試這個

while(1) 
{ 
    if(i == 6) 
     break; 
    if((temp[i] = getchar()) != '\n') 
    { 
     putchar(temp[i]); 
     i++; 
    } 
} 

也閱讀了本answer知道如何getchar作品。

+1

啊,6上傳?有沒有人真的編譯和運行代碼?如果用戶輸入一次字符,循環將打破屏幕上的6個字符。 – WKPlus

+0

@haccks是的,因爲WKplus說它會打破之前,我不想要,因爲輸入是每行一個字符 – Mcolorz

+0

@Mcolorz使用rajenpandit的代碼。 – WKPlus

5

檢查空格字符,不要添加/計數它。 getchar()返回所有你命中的字符,包括新的行和空格。

while(i < 6) 
{ 
    temp[i] = getchar(); 
    if (isspace(temp[i])) 
     continue; 

    putchar(temp[i]); 
    i++; 
} 
1

getchar在距stdin緩衝器一次讀取一個字符。一旦你輸入一個字符並按回車鍵,然後在stdin緩衝區中兩個字符被存儲。

如果你想通過使用你的代碼輸入六個字符,然後輸入所有字符,然後按下輸入它將工作。否則你將不得不跳過「輸入」字符。像這樣...

#include<stdio.h> 
int main() 
{ 
     int i=0; 
     char temp[10]; 
     while(1) 
     { 
       if(i == 6) 
         break; 
       temp[i] = getchar(); 
       if(temp[i]!='\n') 
       { 
         putchar(temp[i]); 
         i++; 
       } 
     } 
} 
1

爲什麼getchar需要輸入作爲輸入之一?

字符輸入函數一次從一個字符流中讀取輸入。當被調用時,這些函數中的每一個都會返回流中的下一個字符,如果文件已達到或發生錯誤,則返回EOF。 某些字符輸入功能被緩衝(例如:getchar())。這意味着操作系統將所有字符保存在臨時存儲空間中,直到我們按下輸入,然後系統將字符發送到stdin流。

如何避免這種情況? 正如haccks所示

0

這個方法怎麼樣。你可以兩次使用getchar()兩次。 像這樣,

while(1) 
{ 
    if(i == 6) 
     break; 
    temp[i] = getchar(); 
    getchar(); 
    putchar(temp[i]); 
    i++; 
}