我有一个程序,但是当我在程序要求输入时输入浮点数时,程序会突然跳过一个步骤并移至最终输出。该程序如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b,c;
int i;
printf("Please enter a number: ");
scanf("%d", &a);
printf("Please enter a number: ");
scanf("%d", &b);
c = 0;
for(i=0; i < b; i++)
{
c = c + a;
}
printf("%d x %d = %d\n", a, b, c);
return 0;
}
当我为
a
输入一个整数时,以及 b
的浮点数,如果 b
的小数点后的数字,程序将按预期输出乘积。被截断。但是,当我输入 a
的浮点数时,程序不取第二个数字的值 b
而是跳过该步骤并输出 a x -858993460 = 0
的整数版本.例如:
a = 整数,b = 浮点数
Please enter a number: 3
Please enter a number: 5.6
3 x 5 = 15
a = float ,b = 跳过
Please enter a number 3.9
Please enter a number: 3 x -858993460 = 0
代码中的所有缺陷都是故意的,但我只是想知道为什么它的行为会像我上面解释的那样。我知道这是因为试图将浮点数输入到有符号整数中,但我不确定究竟是什么导致它跳过第二个
scanf("%d", &b)
.谁能解释为什么会发生这种情况?谢谢。
最佳答案
它看起来像 scanf()
在第二种情况下读取您的“3”,而忽略“9”。
然后当第二个 scanf()
被调用时,输入缓冲区中已经有文本(“.9”)。
我无法确切地说出它对“.9”做了什么。它可能已经找到了点,并在那里中止了 b 未初始化。通过逐步调试调试器来确定正在发生的事情应该是一件简单的事情。
但是,基本上,并不是所有的输入都被第一次调用 scanf()
处理了。这就是第二个电话试图阅读的内容。这就是为什么它不会等待您为第二次调用输入任何数据。
关于c - 在只处理整数的程序中输入 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6922442/