c - 删除 `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 中使用了字符串?
解决方案
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)
推荐阅读
- java - 无法从位置 'classpath:/application.yml' 加载属性源
- vb.net - 当代码在windows10操作系统的VS2010上运行时,应用程序按钮是不可见的。但相同的代码在 windows7 VS2010 中运行良好
- css - 无法在 NativeScript 中使用字体图标
- python - python中的行继续字符后的意外字符
- javascript - 如何将数组发送到nodejs服务器?
- reactjs - 在 Main.go 中连接 ReactJS 文件
- php - 如何使用 PHP 的 force.com 工具包从 salesforce 检索元数据?
- python - HSM 与 Python 请求模块的集成
- selenium - contains(., 'some text') 是指 Selenium 中使用的 xpath 中的内容
- javascript - Vuex mapAction 的“未知动作类型”