繁体   English   中英

EOF之前没有换行符?

[英]No newline before EOF?

我正在解决K&R的一项练习,但遇到了一个小问题。 练习是在输入中打印单词长度的直方图。

这是我的代码:

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

int main(){
    //Histogram of the length of words
    int c, state, len, i;
    state = OUT;

    printf("Histogram\n");

    while ((c = getchar()) != EOF){
        if (c != ' ' && c != '\n' && c != '\t' && c != '\r'){
            state = IN;
            len++;
        } else if (state == IN){
            for (i = 0; i < len; i++){
                putchar('[');
                putchar(']');
            }
            len = 0;
            putchar('\n');
            state = OUT;
        }
    }

    return 0;
}

我使用的文本文件是:

Hello World! This is a text

该程序的输出为:

Histogram
[][][][][]
[][][][][][]
[][][][]
[][]
[]

可以看出,该程序在打印出最后一个单词“文本”的直方图之前终止。 这是因为Windows上的文本编辑器不会自动在末尾添加'\\ r \\ n'吗? 如果是这样,我该如何解决此问题?

谢谢。

getchar()返回EOF时,您的循环结束,因此else if在结尾处,您永远不会进入else if

例:

#include <stdio.h>
#include <stdbool.h>

int main(void) {
  printf("Histogram\n");

  size_t len = 0;
  bool running = true;
  while (running) {
    switch (getchar()) {
    case EOF:
      running = false;
    case ' ':
    case '\n':
    case '\t':
    case '\r':
      if (len != 0) {
        printf("\n");
        len = 0;
      }
      break;
    default:
      printf("[]");
      len++;
    }
  }
}

移动测试:

while (true)
{
    const int c = getchar();
    if (c != ' ' && c != '\n' && c != '\t' && c != '\r' && c != EOF)
    {
        state = IN;
        len++;
    }
    else if (state == IN)
    {
        // ...
    }

    if (c == EOF) break;
}

暂无
暂无

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

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