gpt4 book ai didi

c - 将 float 输入到仅处理整数的程序中

转载 作者:行者123 更新时间:2023-11-30 16:12:05 25 4
gpt4 key购买 nike

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

#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输入float时,如果小数点后的数字,程序将按预期输出乘积b 被截断。但是,当我为 a 输入 float 时,程序不会获取第二个数字 b 的值,而是跳过该步骤并输出 的整数版本x -858993460 = 0

例如:

a = 整数,b = float

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

代码中的所有缺陷都是故意的,但我只是想知道为什么它的行为方式是我上面解释的。我知道这是因为尝试将 float 输入有符号整数有关,但我不确定到底是什么导致它跳过第二个 scanf("%d", &b)。谁能解释一下为什么会发生这种情况?

谢谢。

最佳答案

看起来 scanf() 在第二种情况下正在读取“3”,并忽略“9”。

然后,当调用第二个 scanf() 时,输入缓冲区中已经有文本(“.9”)。

我无法准确说出它对“.9”的作用。它可能已经找到了该点,然后因 b 未初始化而中止。通过使用调试器单步执行来确定正在发生的情况应该是一件简单的事情。

但是,基本上,第一次调用 scanf() 并不是所有的输入都会被处理,所以这就是第二个调用试图读取的内容。这就是为什么它不会等待您为第二次调用输入任何数据。

关于c - 将 float 输入到仅处理整数的程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58432030/

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