gpt4 book ai didi

c - 在只处理整数的程序中输入 float

转载 作者:行者123 更新时间:2023-12-04 18:50:23 25 4
gpt4 key购买 nike

我有一个程序,但是当我在程序要求输入时输入浮点数时,程序会突然跳过一个步骤并移至最终输出。该程序如下:

#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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com