删除 else 条件突然使代码工作,是什么给了?

Removing `else` condition suddenly makes the code work, what gives?

这段代码没有按预期运行 - 它应该打印出所有明文。我猜引擎盖下有什么东西在起作用,但我不明白这种逻辑。如果您删除带有基础语句的 else 条件,它会突然起作用。

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


int main() {

    string plaintext = get_string("plaintext: ");
    
    int i;
    for(i = 0; plaintext[i] != '[=10=]'; 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 中使用了字符串?

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

等同于:

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

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

另一个问题:

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

应该是

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