gpt4 book ai didi

c - 切换 If 和 Else 不会产生相同的结果

转载 作者:行者123 更新时间:2023-12-02 17:59:24 26 4
gpt4 key购买 nike

我一直在研究 K&R 的《C 编程语言》中的一些示例,但我对练习 1-12 中切换 if 和 else 语句的测试感到有点困惑。

问题是:编写一个程序,每行打印一个单词的输入。

所以基本上是为了测试\n 同时忽略单词之间的多个空格,我首先写了这个。

#include <stdio.h>

int main()
{
int c;

while ((c = getchar()) != EOF) {
if (c == ' ' || c == '\t') {
printf("\n");

}
else {
putchar(c);
}

}
}

在这个例子中,它会在看到空格或制表符时打印出一个新段落,如果没有,则它会准确复制输入。

这段代码产生了我想要的结果(好吧,输入时单词之间的额外空格仍然存在额外的段落,但我现在忽略它)

然后我决定看看如果在改变条件的同时切换 if 和 else 语句会发生什么,但事实证明结果并不相同。

#include <stdio.h>

int main()
{
int c;

while ((c = getchar()) != EOF) {
if (c != ' ' || c != '\t') {
putchar(c);
}
else {
printf("\n");
}

}

}

在这个中,我希望它打印出不是空格或制表符的任何内容,如果没有,它将创建一个新段落。

我预计新的条件会产生相同的结果。相反,它只是复制了我输入的内容。有谁知道为什么这不起作用?

最佳答案

    if (c != ' ' || c != '\t') {

此条件检查 c 是否不是空格, c 是否不是制表符。这始终是正确的,因为 c 不能同时是空格和制表符。尝试:

    if (c != ' ' && c != '\t') {

您可以在 De Morgan's Laws 中更详细地了解这一原则。 .

另一种方法是让编译器为您执行逻辑否定:

    if (!(c == ' ' || c == '\t')) {

但是,有些人(包括我)会认为由于额外的括号和左侧的小 ! 而难以阅读。

关于c - 切换 If 和 Else 不会产生相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11996016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com