我正在尝试在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,我得到Error的输出。我遇到的第二个问题是当它输出Error时,它会将其打印到用户输入提示
答案 0 :(得分:3)
简单的答案是将"%s"
中的scanf
更改为"%[^\n]"
,其中会读取换行符以外的所有字符。
更好的答案是将其更改为"%255[^\n]"
,其执行相同但包括边界检查。
最好的答案是使用fgets
,它没有确切的读取问题,或者难以进行适当的边界检查。
答案 1 :(得分:2)
这是因为当您编写scanf('%s')
时,在输入test 1
上,%s
仅扫描到第一个空格,而您的程序收到的输入实际上只是test
。
在调试方面做一件有用的事情就是做一个
printf("Error: %s", input)
所以你可以看到scanf
给你带来的东西。
如果您只想要输入整行,fgets()
最好使用。