2014-11-01 103 views
0

我正在製作一個基於文本的遊戲,並且我遇到了很大的輸入問題。這是一個我的問題代碼的例子。所以,如果你編譯/運行這個,並鍵入'abc',它將只取每一個,並通過循環發送它。我需要它做的只是第一個字符,有人輸入,無論他們輸入多少個。輸入問題scanf()/ getchar()

而且,PS:我已經嘗試過這種方式,它做了同樣的事情:

#include <stdio.h> 
#include <stdlib.h> 

char c[2]; 

int main(int argc, char *argv[]){ 

    system("clear"); 

    while(1){ 
     printf("\nInput a character.\n"); 
     scanf("%1s", c); 
     printf("\nYour input: %c\n", c[0]); 
     sleep(1); 
     system("clear"); 
    } 

    return 0; 
} 

編輯:它也增加了一個空間,你什麼都輸入,我認爲它是一個\ 0,但我不知道。謝謝!

+0

通常,標準輸入緩衝,直到用戶按下回車鍵。獲取單個字符的方法因操作系統而異。你在使用哪種操作系統? – user3386109 2014-11-01 19:08:03

+0

我使用的是Ubuntu 14.04 LTS – 2014-11-01 19:08:46

+0

這實際上令人沮喪的是,這個標準並沒有給出處理這種情況的好方法。在POSIX系統上,你可以使用'getline',它工作得非常好。 – MicroVirus 2014-11-01 19:08:47

回答

0

我想你可以添加1更多的線路來讀取第一個後過來的所有字符,直到有一個換行符(即用戶按下回車鍵):

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

添加到您的例子,它會是這樣:

#include <stdio.h> 
#include <stdlib.h> 

char c; 

int main(int argc, char *argv[]){ 

system("clear"); 

while(1){ 
    printf("\nInput a character.\n"); 
    c = getchar(); 
    printf("\nYour input: %c\n", c); 
    sleep(1); 
    system("clear"); 
    while (getchar() != '\n'); 
} 

return 0; 
} 
+0

謝謝!這固定它! – 2014-11-01 19:46:24

0

當您使用scanf時,輸入一個字符串並點擊ENTER鍵,一個字符串和一個字符被放置在輸入緩衝區中,它們分別是:輸入的字符串和換行符。逐字符的字符或字符被scanf佔用,但換行符保留在輸入緩衝區中,除非您也使用該字符串。

getchar(),另一方面不會等待ENTER鍵,它會逐個字符地讀出你的邏輯。

0

使用getch()不等待換行符。

0

什麼,我想你尋找的是這樣的代碼,保存第一個字符,你也可以檢查是否c=='\n「繼續您的操作,但我不知道你想要之後省第一個字符:

int i,c; 
char save; 
for (i = 0;(c=getchar())!= EOF ; i++) 
{ 
    if (i == 0) 
     save = c; 
} 
0

您可以使用fgets(),並提取其第一個字符,像...

char ch[2], c; 
fgets(ch, 2, stdin); 
c = ch[0];