2011-02-25 79 views
1

我試圖創造C.這裏一個簡單的程序是有點兒什麼我迄今爲止的基礎C輸入問題

#include <stdio.h> 
int main() 
{ 
    char input[256]; 
    while(1) 
    { 
    printf("Input: "); 
    scanf("%s", input); 
    if(strcmp(input, "help") == 0) 
     printf("HELP STUFF HERE\n"); 
    else if(strcmp(input, "1") == 0) 
     printf("2\n"); 
    else if(strcmp(input, "test 1") == 0) 
     printf("Test 1\n"); 
    else if(strcmp(input, "test 2") == 0) 
     printf("Test 2\n"); 
    else 
     printf("Error"); 
    } 
    return 0; 
} 

我有一些問題,但。首先我不能使用空格。如果我嘗試測試1,我會得到錯誤的輸出。我在第二個問題是,當它輸出錯誤,它打印它到用戶輸入提示

回答

3

簡單的答案是將"%s"改爲scanf"%[^\n]",它讀取除換行符以外的所有字符。

更好的答案是將其更改爲"%255[^\n]",它做相同的但包括邊界檢查。

最好的答案是使用fgets,它不會有什麼時髦的問題,或者它會讀取什麼,或者很難做適當的邊界檢查。

+0

這是我第一次見到這樣的scanf格式說明符。它看起來像一個正則表達式。這甚至是標準嗎? – 2011-02-25 02:11:36

+0

嗯,我已經嘗試了你給我的前兩個建議,當我輸入1時,它會反覆打印2等。我會更多地關注fgets。 – AustinM 2011-02-25 02:11:41

+0

@AustinM - 是的。 (當我第一次聽到它時,我也持懷疑態度。) – 2011-02-25 02:13:51

2

這是因爲當你寫scanf('%s'),輸入test 1%s只掃描到第一空間和輸入你的程序接收實際上只有test

在調試方面做一個有用的東西是做一個

printf("Error: %s", input) 

所以你可以看到什麼scanf就是得到你。

如果你只是想要整行輸入,fgets()更好用。

+0

-1'gets'永遠不會更好用。 – 2011-02-25 02:03:13

+2

永遠不要使用獲取,只能使用fgets。 – 2011-02-25 02:04:14

+0

謝謝,糾正 – 2011-02-25 02:10:52