Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用scanf一次扫描多个字符和整数_C_Scanf - Fatal编程技术网

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

使用scanf一次扫描多个字符和整数,c,scanf,C,Scanf,这个问题似乎比较直截了当和基本。好像以前会有人问过,但我在搜索引擎上找不到任何东西。我需要一个用户输入多个变量,然后在一次扫描中存储。我是新来C的,所以我不确定为什么这不起作用。我知道这是个新手,但作为C的新手我不确定 用户几乎会输入*2 4之类的内容,但由于某些原因,变量值在下一个方法中永远不会更改 即使我将printfvalue设置为%d和%d,&start和&end;扫描之后,值仍然没有改变 char symb; int start, end; printf("Enter a symbol

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

用户几乎会输入*2 4之类的内容,但由于某些原因,变量值在下一个方法中永远不会更改

即使我将printfvalue设置为%d和%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);
您可以通过检查scanf的返回值来检查scanf是否成功;如果不返回3,代码将无法继续,因为未扫描值。

在%c之前添加空格,以使用前面的空格并检查扫描结果

scanf%c%d%d,&symb,&start,&end使用任何字符并将其保存到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和%2之外的所有说明符[即使没有前导,也要使用前导空格。

我发现我的打印方法有问题,在不需要的时候使用了符号。

这里的符号是什么?。提供do_函数体我在搜索引擎中找不到任何东西-然后阅读手册页或您想要使用的函数的其他文档。哦,很抱歉,这是这只是一个复制错误。我修复了它。do_函数只是打印出symb、start和end的值。但是在我的do_函数方法中,它从不从扫描函数中更改这些值。在我的do_函数方法中,它打印出传递的变量的值,它们从不从扫描函数中更改,所以我在这里问我有什么不正确的地方
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);