C输入问题

时间:2011-02-25 01:57:16

标签: c input scanf

我正在尝试在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时,它会将其打印到用户输入提示

2 个答案:

答案 0 :(得分:3)

简单的答案是将"%s"中的scanf更改为"%[^\n]",其中会读取换行符以外的所有字符。

更好的答案是将其更改为"%255[^\n]",其执行相同但包括边界检查。

最好的答案是使用fgets,它没有确切的读取问题,或者难以进行适当的边界检查。

答案 1 :(得分:2)

这是因为当您编写scanf('%s')时,在输入test 1上,%s仅扫描到第一个空格,而您的程序收到的输入实际上只是test

在调试方面做一件有用的事情就是做一个

printf("Error: %s", input)

所以你可以看到scanf给你带来的东西。

如果您只想要输入整行,fgets()最好使用。