我正在尝试执行这段代码.
#include <stdio.h>
int main(void)
{
printf("Start from here\n");
int e, f, g, h;
scanf("%d,%d", &e, &f);
scanf("%d, %d", &g, &h);
printf("%d %d %d %d", e, f, g, h);
}
Run Code Online (Sandbox Code Playgroud)
当我输入2,0或匹配第一个格式字符串的东西时,scanf()第二个scanf()也执行.
但是,如果我输入类似于2-0第一个的东西scanf(),程序会跳过第二个scanf()并直接进入printf()
例如,这是程序样本运行的输入和输出.第二行是输入.
Start from here
1-2
1 0 -2 -856016624u
Run Code Online (Sandbox Code Playgroud)
注意程序如何完全跳过第二个scanf(),并直接进入printf().为什么第二个scanf()被跳过这里?
Pet*_*r G 21
scanf格式字符串也关心它中的非格式说明符.当您写"1-2"时,第一个scanf将显示为"1",然后查找逗号.它不会找到一个,所以它会放弃.现在,第二个scanf将看到"-2",然后查找逗号.它不会找到一个,所以它会放弃.
最终结果是其他两个变量不会被设置,因此它们最终会成为执行时内存位置中的垃圾.
您可以通过检查scanf的返回值来避免这种情况.它会告诉你它找到了多少值.试试这个:
#include <stdio.h>
int main(void)
{
printf("Start from here\n");
int e, f, g, h;
if (scanf("%d,%d", &e, &f) != 2) { /* error handling */ }
if (scanf("%d, %d", &g, &h) != 2) { /* error handling */ }
printf("%d %d %d %d", e, f, g, h);
}
Run Code Online (Sandbox Code Playgroud)
小智 1
在您的代码中,scanf("%d, %d",&e,&f)是这样的,所以您应该给出如下输入:1,2或2,3等
0-2如果您希望输入像或 那样给出2-4,那么您的 scanf 必须像这样: scanf("%d-%d",&e,&f)。
这样就不会被跳过了。
| 归档时间: |
|
| 查看次数: |
1560 次 |
| 最近记录: |