基本条件运算符

Basic Conditional Operator

我已经尝试使用条件运算符来减少以下 C 程序中的代码行,但是,我没有得到想要的结果。

Objective - 如果 y > 7 则将 x 的值设置为 50 否则将其设置为 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");
    }
}

Objective - To set the value of x to 50 if y > 7 else set it to 25

那么你在这里交换了值:

y > 7 ? 25 : 50
        ^^   ^^
         wrong

必须是:

y > 7 ? 50 : 25

原因是:

y > 7 ? 50 : 25
\---/    |    |
  |      |    -----> Result if condition is FALSE
  |      |
  |      ---> Result if condition TRUE
  |
condition

其他说明

  1. 为什么总是用50或25覆盖x作为输入?

  2. 始终检查 scanf

    中的 return 值
  3. 无法访问您的 if 语句的 else 部分。所以可以删除。

  4. printf("Enter y: ",y); 是错误的。你不打印 y。所以删除 ,y

所以简单地做:

#include <stdio.h>

int main(void)
{
    int x,y;

    printf("Enter y: ");

    if (scanf("%d",&y) != 1)
    {
        puts("wrong input");
        return 0;
    }

    x = y > 7 ? 50 : 25;
    printf("Value of x: %d", x);

    return 0;
}

最后的笔记

您的代码有这一行:

if (x = y > 7 ? 25 : 50)

在这里,您在 if 条件中对 x 进行赋值,然后将赋值用作 if.

的条件

虽然它是完全合法的 C 代码,但大多数程序员认为它很糟糕。原因是容易与

混淆
if (x == y > 7 ? 25 : 50)
      ^^
    Did you really want a compare!?

一般来说,最好避免在 if 条件下赋值,即你可以这样做:

x = y > 7 ? 25 : 50;
if (x)

相反。这样做的另一个好处是,无法到达 else 部分也更加清楚。