繁体   English   中英

为什么第二个scanf()不会执行

[英]Why won't the second scanf() execute

我正在尝试执行这段代码。

#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);
}

当我输入2,0或与第一个scanf()中的格式字符串匹配的东西时,第二个scanf()也会执行。

但是,如果我在第一个scanf()输入类似2-0的内容,程序将跳过第二个scanf()并直接进入printf()

例如,这是程序样本运行的输入和输出。 第二行是输入。

Start from here
1-2  
1 0 -2 -856016624u

注意程序如何完全跳过第二个scanf() ,然后直接进入printf() 为什么在这里跳过第二个scanf()

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);
}

删除两个格式说明符之间的逗号

scanf("%d %d", &e, &f); // Remove comma in first argument of scanf
scanf("%d %d", &g, &h);  // Remove comma in first argument of scanf
        ^^^
      Remove comma between two numbers

因为scanf只会跳过空格comma不是空格

当你要求scanf读取数字数据时实际发生的事情是它首先跳过它找到的任何空格,然后它读取字符,直到它读取的字符不能形成数字的一部分。

在这种情况下,当遇到逗号时 ,它会停止读取。 由于它没有读取任何数字,因此没有数字可供存储,因此它只保留原始值。

在你的代码中, scanf("%d, %d",&e,&f)是这样的,所以你应该给你的输入如: 1,22,3

如果您希望输入为0-22-4 ,则scanf必须如下: scanf("%d-%d",&e,&f)

这样就不会跳过它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM