使用scanf一次扫描多个字符和整数

时间:2014-09-16 14:47:53

标签: c scanf

问题似乎相对简单和基本。好像以前会被问过,但我找不到任何使用搜索引擎的东西。我需要用户输入多个变量,然后我在一次扫描中存储。我是C的新手,所以我不确定为什么这不起作用。我知道这是新手,但作为C的新手,我不确定。

用户几乎会输入类似" * 2 4"的东西,但由于某种原因,变量值永远不会在下一个方法中被更改。

即使我在扫描后立即放置printf("Values are %d and %d", &start, &end);,价值仍然无法改变。

char symb;
int start, end;
printf("Enter a symbol, a start point, and an end point : ");
scanf("%c %d %d", &symb, &start, &end);
do_function(symb, start, end);

3 个答案:

答案 0 :(得分:0)

您可以通过检查其返回值来检查scanf()是否成功;如果它没有返回3,则由于未扫描值,您的代码将无法继续。

答案 1 :(得分:0)

"%c"之前添加空格以消耗前面的空格并检查scanf()结果。

if (scanf(" %c %d %d", &symb, &start, &end) != 3) {
  puts("Bad input");
  exit (-1);
}

scanf("%c %d %d", &symb, &start, &end)使用任何 char并将其保存到symb。通常这是前一行的'\n'。然后'*'停止尝试读取数字。

更好的方法是读取整行,然后扫描它。

char buf[100];
if (fgets(buf, sizeof buf, stdin) == NULL) Handle_IOErrorOrEOF();
if (sscanf(buf, " %c %d %d", &symb, &start, &end) != 3) {
  puts("Bad input");
  exit (-1);
}
do_function(symb, start, end);

注意:" %c %d %d"可以是" %c%d%d",因为除了"%c""%n""%["之外的所有说明符都会消耗领先的空格,即使没有前导{{1} }}

答案 2 :(得分:0)

弄清楚我的打印方法是错误的(当不需要时使用&符号)