我正在学习C,我遇到了一个奇怪的问题.
我正在尝试编写一个程序,它能够输入一个句子并将它们作为单独的单词输出.
INPUT: a bb ccc dddd eeeee
DESIRED a
OUTPUT: bb
ccc
dddd
eeeee
Run Code Online (Sandbox Code Playgroud)
当我编写以下代码时,这很有效.但是,当我将部分代码更改为我认为应该以相同方式工作时,它的工作异常.
原始代码:
#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;
}
}
Run Code Online (Sandbox Code Playgroud)
当我替换以下时它错误地工作:
if (c == ' '){
if (lastc != ' ')
putchar('\n');
}
Run Code Online (Sandbox Code Playgroud)
同
if (c == ' ' && lastc != ' ')
putchar('\n');
Run Code Online (Sandbox Code Playgroud)
更换后,使用相同的输入,输出将更改为:
UNDESIRED a
OUTPUT: bb
ccc
dddd
eeeee
Run Code Online (Sandbox Code Playgroud)
我的问题:两个代码不是一样的吗?为什么输出有所不同?谢谢!
问题是第一个if语句在执行替换时执行的情况比以前更多(以前,c == ' '足以防止else情况,但是在你还需要lastc!='\n'阻止else情况运行之后)
为什么你甚至试图将两个ifs合二为一?它们是分开的,一个接一个是有充分理由的.
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |