w349695434051 发表于 2023-10-18 23:26:58

有关于条件语句

条件语句后面不能加if语句吗
为什么报错

#include<stdio.h>

#define RATEWALK 1.2
#define RATEBIKE 3.0

int main()
{
        double timewalk = 50;
        double timebike = 0;
        int rode = 0;
        scanf("%d", &rode);
        timewalk += rode / RATEWALK;
        timebike += rode / RATEBIKE;
        timewalk > timebike ? printf("Bike") :
          if(timewalk < timebike)
                printf("Walk");
          else
                printf("All");
        return 0;
}
expected expression before 'if'
'else' without a previous 'if'

isdkz 发表于 2023-10-18 23:27:35

条件语句后面不能直接加if语句。在C语言中,条件语句的语法是 expression ? statement1 : statement2 ,其中expression是一个表达式,statement1和statement2是两个语句。当expression的值为真时,执行statement1;当expression的值为假时,执行statement2。

在你的代码中,你尝试在条件语句的第一个分支中加入一个if语句,这是不合法的。正确的做法是将if语句放在条件语句的外部,如下所示:

timewalk > timebike ? printf("Bike") :
    (timewalk < timebike ? printf("Walk") : printf("All"));


这样,当timewalk大于timebike时,输出"Bike";当timewalk小于timebike时,输出"Walk";当timewalk等于timebike时,输出"All"。

希望这个解释对你有帮助。如果你还有其他问题,请随时提问。

Mike_python小 发表于 2023-10-18 23:27:40

条件语句后面不能直接加if语句。在这个例子中,因为三元运算符 ? : 的右侧需要返回一个表达式,而 if 语句并不是一个表达式,所以会报错。

可以通过将 if 语句的内容提取出来,变成一个表达式来解决这个问题,比如定义一个变量来保存需要输出的结果。

示例如下:


#include <stdio.h>
#define RATEWALK 1.2
#define RATEBIKE 3.0

int main()
{
    double timewalk = 50;
    double timebike = 0;
    int rode = 0;
    scanf("%d", &rode);
    timewalk += rode / RATEWALK;
    timebike += rode / RATEBIKE;
    const char* result = (timewalk > timebike) ? "Bike" : ((timewalk < timebike) ? "Walk" : "All");
    printf("%s", result);
    return 0;
}


在这个例子中,利用了条件运算符的特性,当 timewalk > timebike 时返回 "Bike" ,当 timewalk < timebike 时返回 "Walk" ,否则返回 "All"。然后将返回的字符串指针保存到变量 result 中,最后再通过 printf 函数输出。

希望能够帮助到您!如果有任何其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

陶远航 发表于 2023-10-18 23:27:55

你的代码中的错误是由于你试图在三元运算符(?:)后面直接使用if语句,这是不允许的。三元运算符的语法是:条件 ? 表达式1 : 表达式2。如果条件为真(非零),则表达式1被执行,否则执行表达式2。在这里,表达式1和表达式2都应该是可以被执行的表达式,而不是控制流语句(如if语句)。

你可以通过将if语句移到三元运算符之外来修复这个问题。以下是修复后的代码:

#include<stdio.h>

#define RATEWALK 1.2
#define RATEBIKE 3.0

int main()
{
      double timewalk = 50;
      double timebike = 0;
      int rode = 0;
      scanf(\"%d\", &rode);
      timewalk += rode / RATEWALK;
      timebike += rode / RATEBIKE;
      if(timewalk > timebike)
            printf(\"Bike\");
      else if(timewalk < timebike)
            printf(\"Walk\");
      else
            printf(\"All\");
      return 0;
}


在这个修复后的代码中,我已经将三元运算符替换为了一个完整的if-else if-else语句,这样就可以根据timewalk和timebike的值来打印出不同的结果了。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
页: [1]
查看完整版本: 有关于条件语句