我正在学习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
我的问题是:两个代码不是做同一件事吗?为什么输出不同?谢谢!
最佳答案
问题是第一个if的else语句在执行替换时执行的情况比以前多(之前,c == ' '
足以防止else情况,但之后还需要lastc!='\n'
来防止else情况运行)
你为什么要把这两个假设合二为一?他们是分开的,有一个很好的理由。
关于c - 使用C分解单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38168249/