2011-02-25 136 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