繁体   English   中英

C - 每行打印一个字

[英]C - Print one word per line

我正在尝试制作我的以下 C 程序的版本,该程序包含在 C 编程语言的着名书中:

编写一个程序,每行打印一个单词。 这是我的代码:

#include <stdio.h>
#define OUT 1
#define IN 0

int main(void){
    char c;
    int state = OUT; /*Indicates if we are IN a white space, tab, nl or if we are OUT (a simple letter)*/

    while ((c = getchar()) != EOF)
    {
        if (c == ' ' || c == '\n' || c == '\t')
        {
            state = IN;
            putchar('\n');      
        } else 
            if(state == IN){
                state = OUT;
                putchar(c);
            } 
    }   
    return 0;
}

为了测试它,我尝试作为输入:

  • "abc" 其中程序 output 为 "a"。
  • "abc" 将程序 output 表示为每行一个字母。

正确地说,“abc”是因为 getchar() function 而被中继的,它只记住了“c”变量中的一个字符? 而且这也是正确的,说 getchar() function 将“abc”作为单个字符处理了 3 次(迭代时 3 次),因为每个字母之间有空格?

正确地说,“abc”是因为 getchar() function 而被中继的,它只记住了“c”变量中的一个字符?

这是不正确的, getcharchar解析char ,它不会truncate ,发生的事情是state仅在输入空格、换行符或制表符时才被分配IN

由于putchar(c)的执行取决于state是否等于IN它永远不会打印任何内容,除非在某些时候输入这三个空白字符之一,在这种情况下,它将打印下一个字符或\n用于这三个字符之一空白字符。

而且这也是正确的,说 getchar() function 将“abc”作为单个字符处理了 3 次(迭代时 3 次),因为每个字母之间有空格?

所有 5 个字符都由getchar()读取,output 将是:

b 
c

由于上一个问题中解释的原因。

脚注

getchar()应该分配给它的返回类型int ,将它分配给char是有问题的,因为char可能是无符号的并且 EOF 通常是-1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM