我写下第一个要扫描的号码,然后按下输入后,它会在窗口中显示“无响应”消息

时间:2013-10-18 18:11:02

标签: c compilation

为什么代码不起作用?编译完成后,我写下第一个要扫描的号码,然后按回车键,它会在窗口中显示“无响应”信息。

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

}

3 个答案:

答案 0 :(得分:1)

要使代码正常工作,请尝试在两个数字之间输入空格,然后按Enter键

更新:此外,您必须将指针传递给scanf,前缀x1x2&

另外,请查看floating point numbers equality

答案 1 :(得分:1)

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

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

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

在你的程序中,

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

2'%f转换规范。读取输入并将其转换为float"%f %f",之后的参数被视为要存储转换值的地址。指针是预期的。在您的计划中,预计会有两个float *。您提供x1x2,两者都属于float类型,这本身就是错误的。

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


解决方案:

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

要存储%f类型的float,您需要float*,其中包含float变量的地址。

&运算符为您提供操作数的地址。您可以通过

解决问题
scanf("%f %f",&x1,&x2);

答案 2 :(得分:0)

见IIya的回答。另外:

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

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

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