0

我正在使用 GCC 编译器。在我的程序中,我使用了 3scanf秒,但在执行时只执行了 2scanf秒。为什么跳过 1 scanf?它只执行 else 条件。

#include <stdio.h>
int main()
{
    int h, c, t;
    printf("tensile");
    scanf("%d", &h);
    printf("tensile1");
    scanf("%d", &c);
    printf("tensile2");
    scanf("%d", &t);
    if( h > 50 && c > 0.7 && t > 5600)
        printf("HI");
    else
        printf("bye");
    return 0;
}
4

2 回答 2

2

您将其定义c为 anint并将其与0.7. 即使忽略任何scanf问题,这也没有多大意义。为每个变量确定它应该只包含整数还是(可能是小数)实数。对于整数,您可能需要int. 对于实数,您可能需要double. 然后您需要使用正确的格式scanf,具体取决于变量的类型。阅读您的scanf文档以了解详细信息。

使用该"%d"格式,scanf将读取单个整数(在跳过任何空格,包括换行符之后),然后停止。如果输入是"12.34",它将读取"12",存储12在变量中,并将 留".34"在输入流中。当他们看到角色时,以后调用scanfwith将失败。使用其中一种浮点格式来读取类型变量并允许输入,例如."%d"'.'double"12.34"

scanf返回一个结果,表明它成功读取了多少项目,或者一个错误指示。您应该测试该结果,以便您的程序能够检测到错误,而不是盲目地继续使用错误数据运行。

准确地向我们展示(即复制和粘贴)您为程序提供的输入将使您更容易回答您的问题。

打印变量的值和返回的结果scanf将有助于了解正在发生的事情——或者您可以在调试器中检查值(如果可用)。

一些需要注意的事情:scanf将报告输入语法错误的失败(例如,如果它正在寻找一个实数并且您输入"foobar"),但它不一定会诊断溢出。如果您输入1.0e99999999浮点输入,则行为是undefined。避免该问题的唯一真正方法是避免使用scanf数字输入。*scanf(恕我直言,这是 C 标准定义函数的方式中的一个缺陷。)

众所周知,浮点比较不可靠。Ifc是一个浮点变量,c > 0.7可以为真或假,因为该值0.7不能以二进制浮点精确表示。

于 2013-01-27T20:57:26.900 回答
1

将变量 c 的数据类型更改为 float 并使用 %f 作为格式说明符。它正在跳过,因为您正在为整数变量提供浮点值

于 2013-01-27T18:53:32.403 回答