C 嵌套IF-ELSE之前的IF语句

C 嵌套IF-ELSE之前的IF语句,c,if-statement,syntax,C,If Statement,Syntax,我的问题是关于以下代码段是否被认为是良好的程序结构 if(speed > SPEED_LIMIT) printf("Speeding!\n"); if(speed >= 80) { printf("A fine of $%d has been issued!\n", FINE_C); } else if(speed >= 70) 在进入嵌套的if-else之前,可以先使用一个基本的if语句吗 这可能是个奇怪的问题,在学习编程的第二周,我们的单元是C语

我的问题是关于以下代码段是否被认为是良好的程序结构

if(speed > SPEED_LIMIT)
    printf("Speeding!\n");

if(speed >= 80)
{
    printf("A fine of $%d has been issued!\n", FINE_C);
}
else
    if(speed >= 70)
在进入嵌套的
if-else
之前,可以先使用一个基本的
if
语句吗


这可能是个奇怪的问题,在学习编程的第二周,我们的单元是C语言。

是的,语法上没有问题。您可以有任意数量的
if
语句和
if-else
语句相邻。它主要是关于代码的可读性和可维护性,这需要其他可能的方法

例如,更好的“分组”是

结束


是的,你经常看到它。但是,格式化它的正常方法不是添加额外的缩进级别,将else和if放在同一行是正常的。这样你就可以拥有你想要的任意多个,而不用离开屏幕的右侧

if(speed >= 80)
{
    printf("A fine of $%d has been issued!\n", FINE_C);
}
else if(speed >= 70)
{ 
    // whatever
}
else if (speed >= 60)
{
    // whatever
}
else if (speed >= 50)
// etc
这就像switch语句的一个稍微灵活的版本

编辑

我看我回答错问题了。以上都很好,但如果你问这是否可以

if(speed > SPEED_LIMIT)
    printf("Speeding!\n");

if(speed >= 80) ...
那么是的,虽然如果速度限制超过80,逻辑将是错误的,因此最好将其结构如下:

    if(speed > SPEED_LIMIT)
    {
        printf("Speeding!\n");

        if(speed >= 80) ...
    }

在做这件事的时候没有问题。考虑这两个是分开的,不管条件如何满足或不存在,这里唯一要注意的是,如果第一个条件是真的/假的(不管怎样),如果下一步仍然将被执行。如果下一个条件为true,则将执行该条件,然后忽略else


在你想要第二个条件之前,不管第一个条件是真是假,都让它执行。

这不一定是一件坏事,但是,在你的代码中保持一致是你从编程生涯开始就应该自学的东西。:)

例如,您的所有3个if都可以在这样的嵌套if/else中生成,在我看来(和许多其他程序员一样),这样看起来更圆滑

if(speed > SPEED_LIMIT) {
    printf("Speeding!\n");
} else if(speed >= 80) {
    printf("A fine of $%d has been issued!\n", FINE_C);
} else {
    /* whatever happens when speed is greater or equal to 70 /*
}
在大型项目中,一致性非常重要。不仅是为了你自己,也是为了你的同事。例如,当两个做同一件事的函数以不同的方式编写时,理解它们做什么需要更多的工作,结果却发现它们做的是同一件事。非常令人沮丧,不是吗

你可以找到一些你可以遵循的编码惯例,当然,你的老师或者将来你的公司会给你一些你必须遵循的惯例


祝你好运

if-else不是嵌套的。是的,它更多的是用作“else-if(condition)”,我剪掉了一些代码只是为了显示顶部,代码继续进行不同的精细级别,如果else我认为是嵌套的。尽管如此,您发布的代码中没有嵌套if-else。只有最后一个if是嵌套的。不过,这很好,并且生成的代码更小(最有可能)-更优化的方法是嵌入速度(假设速度限制包含在if-else-if结构中)-少检查一个条件(我假设打印以任何方式进行),感谢所有反馈。我不知道还有别的事。这只是我们的第二个实验室,我认为导师更注重可读性,我在搜索时确实找到了一些替代方法,但我认为他可能希望我们坚持到目前为止所学的概念,因为一切都是全新的。这就是为什么我想知道这个问题。这里的响应速度太快了……太疯狂了。“例如,你的所有3个if都可以在这样的嵌套if/else中生成,在我看来(和许多其他程序员)看起来更流畅。”不,因为你改变了程序的语义。
    if(speed > SPEED_LIMIT)
    {
        printf("Speeding!\n");

        if(speed >= 80) ...
    }
if(speed > SPEED_LIMIT) {
    printf("Speeding!\n");
} else if(speed >= 80) {
    printf("A fine of $%d has been issued!\n", FINE_C);
} else {
    /* whatever happens when speed is greater or equal to 70 /*
}