问题似乎相对简单和基本。好像以前会被问过,但我找不到任何使用搜索引擎的东西。我需要用户输入多个变量,然后我在一次扫描中存储。我是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);
答案 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)
弄清楚我的打印方法是错误的(当不需要时使用&符号)