【发布时间】:2021-09-18 13:32:17
【问题描述】:
我尝试使用条件运算符来减少以下 C 程序中的代码行数,但是,我没有得到想要的结果。
目标 - 将 x 的值设置为 50 if y > 7 else 设置为 25
#include <stdio.h> // Conditional Operator
int main()
{
int x, y;
printf("Enter x: ", x);
scanf("%d", &x);
printf("Enter y: ", y);
scanf("%d", &y);
if (x = y > 7 ? 25 : 50)
{
printf("Value of x: %d", x);
}
else
{
printf("Failed\n");
}
}
【问题讨论】:
-
应该是
x = (y > 7 ? 50 : 25)。也就是说,需要括号并且需要反转三元值。另外,scanf("%d",&x);的意义何在,如果您在再次使用之前将其设置为其他内容? -
另外,你为什么认为你可能会打印“失败”?并且您应该在打印
x的代码中包含一个换行符,并且您应该无条件地打印x。而且,作为一般规则,使用条件运算符来尝试减少行数并不是一个特别好的主意——你的目标应该是代码的清晰性,这样你和编译器就不会相互误解。 -
请注意,
printf("Enter y: ", y);对printf()的参数过多。对于另一个提示也是如此,尽管提示x没有什么意义,因为您分配给它而不是使用输入的值。严格来说,您应该检查对scanf()的调用是否成功(返回1),以便您知道用户输入了一个整数值,而不是一个单词或其他一些非数字数据。 -
如果您稍后设置,为什么要输入
x。另外,为什么if声明?它应该只是x=(y > 7 ? 25 : 50)。另外,你真的需要打印else部分吗? -
@kaylum > 的优先级高于 ?: 的优先级高于 =。所以不需要括号(但无论如何都是好的做法)。
标签: c conditional-statements operators