0

为什么代码不起作用?编译后,我写下第一个要扫描的数字,按 Enter 后,它会在 Windows 中显示“无响应”消息。

#include <stdio.h>

int main (void) {
 float x1, x2, y;
 scanf("%f %f", x1, x2);
 if (x1 < x2) {
    y = x1 / x2;
 } else if (x1 == x2) {
    y = x1 * x1 - 3;
 } else {
    y = 4 * x1 + 3 * x2;
 }
 printf("y = %f", y);
 return 0;

}
4

3 回答 3

1

为什么您的程序会抛出“无响应”错误?

scanf()从标准输入流stdin读取输入。

int scanf(const char *restrict format, ... );

在你的程序中,

scanf("%f %f", x1, x2);

2%f转换规格。输入被读取并转换为float. 下面的参数"%f %f",被视为要存储转换值的地址。指针是预期的。在您的程序float *中,预计会有两个。您提供x1, x2, 两者都是float本身错误的类型。

x1并且x2未初始化,因此包含垃圾值。将它们视为地址并读取它们的值是 无效的内存读取,从而导致分段错误。因此,您会收到无响应的错误。


解决方案:

您应该将适当的参数传递给scanf()(阅读);

要存储%fwhich 是 type float,您需要float*which 可以保存float变量的地址。

&运算符为您提供操作数的地址。您可以通过以下方式解决您的问题,

scanf("%f %f",&x1,&x2);
于 2013-10-18T18:55:21.807 回答
1

要使您的代码正常工作,请尝试输入两个数字,它们之间有空格,然后按 Enter

更新:此外,您必须将指针传递给 scanf、prefixx1x2with&

另外,检查浮点数是否相等

于 2013-10-18T18:12:59.780 回答
0

见IIya的回答。此外:

scanf("%f %f", x1, x2);

您需要为变量提供地址。所以...

scanf("%f %f", &x1, &x2);
于 2013-10-18T18:14:45.327 回答