2012-04-10 71 views
1

我有下面的代碼段,其中檢查爲char類型輸入來自鍵盤的字符用C

do{ 
     printf("Do you want to add an edge(n to stop adding)\n"); 
     check = getchar(); 
}while(check!='n'); 

do{ 
     printf("Do you want to add an edge(n to stop adding)\n"); 
     scanf("%c",&check); 

}while(check!='n'); 

它們都產生相同的輸出

例如對於r \ n我得到是否要添加邊緣兩次,也就是說tt \ n我得到同樣的問題三次,然後詢問輸入。

我的問題是如何避免它,爲什麼會發生?

回答

1

爲了解決您的問題,試試這個:

void main() 
{ 
    char check; 
    char c; 
    do 
    { 
     printf("Do you want to add an edge(n to stop adding)\n"); 
     check = getchar(); 
     do { c = getchar(); } while (c != '\n' && c != EOF); // This gobbles the rest of the chars on stdin 
    } while(check != 'n' && check != EOF); 
} 
1

您必須確保check是字母數字,因爲\n不會被scanfgetchar()忽略。

do { 
    printf("Do you want to add an edge(n to stop adding)\n"); 
    do 
    { 
     check = getchar(); 
    } while (!isalnum(check) && check != EOF); 
} while(check!='n'); 

編輯:因爲你想只在一條線上的第一個字符:

char line[64]; 
fgets(line, 64, stdin); 
check = line[0]; 

您還必須檢查,以確保check是你輸入的範圍內。

+0

您還應該檢查EOF,否則程序將永久旋轉。 – geekosaur 2012-04-10 20:45:32

+0

@geekosaur正確,修正。謝謝! – 2012-04-10 20:47:22

+0

雖然這確實解決了\ n問題。但是它不考慮多個字符,如** rrr \ n **在考慮時 – manugupt1 2012-04-10 20:48:41

0

我使用nano編譯器在ubbuntu我的程序編碼。

該程序要求輸入,我只需要單個數字的數字作爲我的輸入,並且在輸入之後立即執行「正常程序操作」應該繼續該程序。

程序必須繼續執行printf(「」)等代碼中記錄的下一個操作。

-----------start------------- 

Input : 2 3 4 5 6 7 

------------end----------------- 

而無需用戶輸入「」(空格),我想以納入「中的程序本身」(空格鍵)。該輸入繼續,只有當用戶 -

  1. 手動輸入空格鍵按鈕
  2. 按下ENTER鍵

其中任何一個,我不想。