删除 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)
这段代码没有按预期运行 - 它应该打印出所有明文。我猜引擎盖下有什么东西在起作用,但我不明白这种逻辑。如果您删除带有基础语句的 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)