用C分解单词

bil*_*llz 0 c

我正在学习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)

我的问题:两个代码不是一样的吗?为什么输出有所不同?谢谢!

Pau*_*ian 5

问题是第一个if语句在执行替换时执行的情况比以前更多(以前,c == ' '足以防止else情况,但是在你还需要lastc!='\n'阻止else情况运行之后)

为什么你甚至试图将两个ifs合二为一?它们是分开的,一个接一个是有充分理由的.