我正在学习C,我遇到了一个奇怪的问题。
我正在尝试编写一个能够输入句子并将其作为单独的单词输出的程序。
INPUT: a bb ccc dddd eeeee
DESIRED a
OUTPUT: bb
ccc
dddd
eeeee
当我编写以下代码时,这很有效。但是,当我将部分代码更改为我认为应该以相同方式工作时,它的工作异常。
原始代码:
#include <stdio.h>
#define NONBLOCK 'c'
/* separate words */
main()
{
int c ,lastc;
int toggle;
lastc = NONBLOCK;
while ((c = getchar()) != EOF){
if (c == ' '){
if (lastc != ' ')
putchar('\n');
}
else{
putchar(c);
}
lastc = c;
}
}
当我替换:
时,它的工作原理错误 if (c == ' '){
if (lastc != ' ')
putchar('\n');
}
与
if (c == ' ' && lastc != ' ')
putchar('\n');
更换后,使用相同的输入,输出将更改为:
UNDESIRED a
OUTPUT: bb
ccc
dddd
eeeee
我的问题:两个代码不是一样的吗?为什么输出有所不同?谢谢!
答案 0 :(得分:5)
问题是第一个if语句在执行替换之前执行的情况比以前更多(之前,c == ' '
足以阻止else情况,但在您还需要lastc!='\n'
之后防止其他情况运行)
为什么你甚至试图将两个ifs合二为一?它们是分开的,一个接一个是有充分理由的。