为什么代码不起作用?编译完成后,我写下第一个要扫描的号码,然后按回车键,它会在窗口中显示“无响应”信息。
#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;
}
答案 0 :(得分:1)
要使代码正常工作,请尝试在两个数字之间输入空格,然后按Enter键
更新:此外,您必须将指针传递给scanf,前缀x1
和x2
与&
答案 1 :(得分: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()
(阅读 this );
要存储%f
类型的float
,您需要float*
,其中包含float
变量的地址。
&
运算符为您提供操作数的地址。您可以通过
scanf("%f %f",&x1,&x2);
答案 2 :(得分:0)
见IIya的回答。另外:
scanf("%f %f", x1, x2);
您需要为变量提供地址。所以......
scanf("%f %f", &x1, &x2);