首页 > 解决方案 > 删除 `else` 条件突然使代码工作,什么给出?

问题描述

此代码没有按预期执行 - 它应该打印出所有纯文本。我猜引擎盖下有些东西在起作用,但这种逻辑让我无法理解。如果您else使用基础语句删除条件,它会突然起作用。

#include <cs50.h>
#include <ctype.h>
#include <stdio.h>


int main() {

    string plaintext = get_string("plaintext: ");
    
    int i;
    for(i = 0; plaintext[i] != '\0'; i++)
        if(isalpha(plaintext[i] != 0))
            printf("%c", plaintext[i]);
        //I intend to do stuff with alphabetic characters, but that code isn't relevant, so it's not included
        else
            printf("%c", 'a');
}

老实说,这对我来说就像魔术一样。为什么添加else条件会影响原始if语句的条件是否满足(如果是这样的话)?

是不是因为在 cs50.h 中使用了字符串?

标签: cif-statementcs50

解决方案


    for(i = 0; plaintext[i] != '\0'; i++)
        if(isalpha(plaintext[i] != 0))
            printf("%c", plaintext[i]);
        else
            printf("%c", plaintext[i]);

是相同的 :

    for(i = 0; plaintext[i] != '\0'; i++)
        printf("%c", plaintext[i]);

因为任何逻辑运算都可能有两种结果:真假。如果在这两种情况下你做的完全一样,你为什么要检查条件?

另一个问题 :

if(isalpha(plaintext[i] != 0))

它应该是

if(isalpha(plaintext[i]) != 0)

推荐阅读