2015-01-04 281 views
-1

我嘗試在char ch[20]中輸入一個字符串,我想當我按下空格鍵時,它會停下來將輸入輸入到變量中。但只要我不按回車鍵,gets()函數就會輸入。只要我不按空格字符,我怎樣才能接受輸入?gets()和getc()之間有什麼區別?

+4

歡迎SO。您的問題標題與您提問的問題不同。另外請儘量給你的問題的文字表達更加關心,有編輯按鈕來幫助你更好地格式化的東西。 – 2015-01-04 10:28:25

+6

另外,你不應該使用'gets',它已經從C標準中刪除,因爲它本質上是不安全的。改爲使用'fgets'。 – 2015-01-04 10:31:17

回答

1

gets()不再是一個標準,它可能會導致緩衝區溢出,所以您應該使用fgets()以便讀取直到行尾。爲了通過字符讀取char,直到遇到空間,可以使用getc(),如下所示。

檢查下面的代碼:

#include <stdio.h> 

int main(void) { 
    int i=0; 
    char ch; 
    char a[20]; 
    while(((ch = getc(stdin)) != ' ') && i<19) 
    a[i++] = ch; 
    a[i] = '\0'; 
    printf("%s\n",a); 
    return 0; 
} 
+0

我得到了我的答案:) – Mastan 2015-01-04 13:11:06

+0

當執行達到'a [i] ='\ 0';'時,'i'可以是20,從而導致未定義的行爲 – 2015-01-04 13:29:37

相關問題