首页 文章

在C中使用EOF的条件

提问于
浏览
4

下面的代码是我在K&R C编程语言中练习1-13的答案,它要求输入中单词长度的直方图 . 我的问题是关于EOF . 如何在不完全结束程序的情况下突破while循环?我使用的是Ctrl-Z,我听说它是Windows上的EOF,但这会结束程序,而不是仅仅打破while循环 . 如何在while循环之后进入for循环而不结束文件?这是一个普遍的问题,不仅仅是我的代码,而是K&R中使用的所有代码:while((c = getchar())!= EOF) . 提前致谢! `

#include <stdio.h>

#define MAXLENGTH 20 /* Max length of a word */
#define IN 1 /* In a word */
#define OUT 0 /* Out of a word */

int main() {
  int c, i, j, len = 0;
  int lenWords[MAXLENGTH];
  bool state = OUT;

  for (i = 0; i < MAXLENGTH; ++i) {
    lenWords[i] = 0;
  }

  c = getchar();
  while (c != EOF) {
    if (c != ' ' && c != '\n' && c != '\t') {
      if (state == IN) {
        lenWords[len - 1] += 1; /* a length 5 word is in subscript 4 */
        len = 0;
      }
      state = OUT;
    }
    else {
      state = IN;
    }
    if (state == IN) {
      len += 1;
    }
    c = getchar();
  }

  /* Generating a histogram using _ and | */
  for (i = 0; i < MAXLENGTH; ++i) { /* Underscores write over one another; not so efficient */
    for (j = 0; j < lenWords[i]; ++j) {
      putchar('_');
    }
    putchar('\n');
    for (j = 0; j < lenWords[i]; ++j) {
      putchar('_');
    }
    putchar('|');
    printf("Length: %d, Frequency: %d", i + 1, lenWords[i]);
  }

  return 0;
}

3 回答

  • 4

    我认为你的问题属于另一个网络 .

    这里的答案:Equivalent to ^D (in bash) for cmd.exe?

    否 . * nix上的CtrlD会生成一个EOF,其中各种shell都会将其解释为正在运行退出 . Windows上EOF的等效项是CtrlZ,但在提示符下键入时,cmd.exe不会特别解释这一点 .

  • 1

    按Ctrl D将 EOF 发送到标准输入并停止读取* nix .

    看看here .

  • 0

    您必须检查是否使用* nix或windows .

    在Windows上,EOF由 Ctrl+Z 表示,而在* nix上EOF由 Ctrl+D 表示

相关问题