【发布时间】:2011-10-18 20:14:22
【问题描述】:
我有一个程序,但是当我在程序要求输入时输入浮点数时,程序会突然跳过一步并移动到最终输出。程序如下:
#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 输入一个int,为b 输入一个浮点数时,如果b 的小数点后的数字被截断,程序将按预期输出乘积。但是,当我为a 输入浮点数时,程序不会采用第二个数字b 的值,而是跳过该步骤并输出a x -858993460 = 0 的整数版本。
例如:
a = int, b = 浮点数
请输入一个数字:3
请输入一个数字:5.6
3 x 5 = 15
a = 浮动,b = 跳过
请输入一个数字 3.9
请输入一个数字:3 x -858993460 = 0
代码中的所有缺陷都是故意的,但我只是想知道为什么它的行为方式与我上面解释的方式相同。我知道这是因为尝试将浮点数输入有符号整数,但我不确定究竟是什么导致它跳过第二个scanf("%d", &b)。谁能解释为什么会这样?
谢谢。
【问题讨论】:
标签: c floating-point int double