鱼C论坛

 找回密码
 立即注册
查看: 1286|回复: 3

[已解决]有关于条件语句

[复制链接]
发表于 2023-10-18 23:26:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
条件语句后面不能加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;
}
[Error] expected expression before 'if'
[Error] 'else' without a previous 'if'
最佳答案
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"。

希望这个解释对你有帮助。如果你还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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"。

希望这个解释对你有帮助。如果你还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-18 23:27:40 | 显示全部楼层
条件语句后面不能直接加if语句。在这个例子中,因为三元运算符 ? : 的右侧需要返回一个表达式,而 if 语句并不是一个表达式,所以会报错。

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

示例如下:

[/code]
#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;
}
[/code]

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

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

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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语句,这样就可以根据timewalktimebike的值来打印出不同的结果了。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 08:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表