Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C If-else语句_C_If Statement - Fatal编程技术网

C If-else语句

C If-else语句,c,if-statement,C,If Statement,我对if-else语句的问题非常困惑 问题在于:使用scanf函数,分别为s和a分配总缺勤(double)和#缺勤(int) 然后,根据以下标准打印分数 如果总数超过70,则打印A+。在这种情况下,如果缺勤日期超过5天,请打印D 如果总数低于70,则在此情况下打印“A0”,如果缺勤超过5天,则打印F 在编码中,只能使用if-else语句中的3个 #include <stdio.h> int main(void) { double s; int a; scan

我对if-else语句的问题非常困惑

问题在于:使用scanf函数,分别为s和a分配总缺勤(double)和#缺勤(int)

然后,根据以下标准打印分数
如果总数超过70,则打印A+。在这种情况下,如果缺勤日期超过5天,请打印D

如果总数低于70,则在此情况下打印“A0”,如果缺勤超过5天,则打印F

在编码中,只能使用if-else语句中的3个

#include <stdio.h>

int main(void)
{
    double s;
    int a;
    scanf("%lf%d", &s, &a);
    if (_________________ )
         __________________
         _________________
         _________________
    else
        __________________
        __________________
        ________________
        __________________
        return 0; }
#包括
内部主(空)
{
双s;
INTA;
scanf(“%lf%d”、&s和&a);
如果(如果)
__________________
_________________
_________________
其他的
__________________
__________________
________________
__________________
返回0;}
我是如何处理这个问题的。总数分为两部分,再除以70分。然后我放置了另一个嵌套的if条件来调节缺勤日期的影响 喜欢 如果 如果 然而,问题由此产生。我不能像你那样做 如果 如果 其他的 如果 因为if不能包含在else语句中!!!。我也不能用elseif语句!! 我想像这样编码

if total >70
    if absence > 5
if total <70
    if absence >5
如果总数>70
如果缺勤>5
如果总数为5

但问题是,我只能使用else 3语句。。。有没有办法缩短代码

问题是您在语法层面上做了一些错误的事情(尽管逻辑是正确的)。以下代码段应该可以工作:

if (total > 70) {
    if (absence > 5) {
       printf("D");
    } else {
       printf("A+");
    }
} else {
    if (absence > 5) {
       printf("F");
    } else {
       printf("A0");
    }
}

注意,在这种情况下,根本不需要大括号,因为每个if语句只包含一条语句。然而,为了清晰起见,我添加了它们。我建议你也这样做,直到你得到一些练习,然后当你发现不需要它们时就可以开始删除它们。

你可以始终使用条件运算符(
?:
)并完全放弃
if else
语句

printf("%s", (total > 70) ? ((absence > 5) ? "D" : "A+") : ((absence > 5) ? "F" : "A0"));

您还可以使用&&使某些事情在没有多个语句的情况下发生。请尝试此原型

#include <stdio.h>
int main(){
    int total = 71;
    int absence = 6;

    if (total > 70 && absence < 5){
        printf("A+");
        return 0;
    }
    if (total < 70 && absence < 5){
        printf("A0");
        return 0;
    }
    if (total > 70 && absence > 5   ){
        printf("D");
        return 0;
    }
    printf("F");
    return 0;
}
#包括
int main(){
整数总计=71;
int缺失=6;
如果(总数>70和缺勤<5){
printf(“A+”);
返回0;
}
如果(总人数<70和缺勤人数<5){
printf(“A0”);
返回0;
}
如果(总数>70和缺勤>5){
printf(“D”);
返回0;
}
printf(“F”);
返回0;
}

[完全混淆:-)]这里是paul92和Sean代码的混合:

if (total > 70)
    printf("%s",(absence > 5) ? "D" : "A+");
else
    printf("%s",(absence > 5) ? "F" : "A0");


就个人而言,我认为嵌套的if/else是最干净的解决方案,但这说明了一种[可能]更干净的方法来使用三元
?:
操作符。

始终使用大括号-这样你就永远不会被裤子弄脏,并且始终正确缩进代码(大多数编辑器会自动这样做)还有一个条件:如果分数是70,会发生什么?您可以说明当它大于或小于时要做什么,但不能说明当它等于时要做什么。是否允许使用条件运算符(
?:
)?如果你是的话,你可以把If-else语句都扔掉。更新我的代码,检查它是否对你有效据我所知,他只限于使用三个If-else语句。这一个使用了6.@seanfrancis.Ballais,我认为您计算错误,因为
if
else
被计算为单个
if else
语句,AFAICT。因此,只要数一数
if
,您就会看到只有3@CraigEstey啊,我明白了。我算错了。很抱歉“我的错!”艾德希尔我得同意。这确实让代码有点不可读。但由于他只限于三个
if-else
语句,因此这可以作为一个替代方案。在任何情况下,他都不受限制,我不建议使用条件运算符(
?:
)。我同意你的说法。这里有一个答案。我决定使用
?:
的答案,但我将它与
if
结合起来,使它更具可读性。对我来说,嵌套的
?:
语句有点像太多的辣椒粉:-)。有时,它们在某些情况下是必需的(例如,在宏内部)。旁注:H/W逻辑设计人员为逻辑电路设计编写RTL(例如verilog),大量使用嵌套的条件运算符OH从不知道!)我现在应该可以在SeanNow打印D了,这样更好。但是如果您使用
else if
会更好,这样它就不必检查每个
if
语句中的每一个条件。但是@chanyoung跳过了该部分的问题是“if不能包含在else语句中”。我的错。还有,“我也不能用其他语句!!”我得说,这是一个更干净的语句。而且只有一个
if-else
语句。但是我倾向于在
if-else
语句中添加大括号,即使它只包含一条语句。@SeanBallais从技术上讲,我们应该将
?:
计算为if-else,所以它仍然是3;-)。我的风格是只有在需要的时候才使用卷发。linux内核源代码可以做到这一点。对我来说,它更干净,特别是因为我总是在if和else上面有一行注释[for intent],中间有一个空行[if-else块用空格包装]。在这里,这太微不足道了。一项研究表明:水平阅读只涉及眼球运动。垂直需要轻微的头部倾斜[使用颈部肌肉]。你自己试试看。读一段话,注意到一行接一行的微妙的头部运动。哦,我不知道。但是,我们有自己的偏好。