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

10-14 02:11