以下代码是我在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;
}
答案 0 :(得分:4)
我认为你的问题属于另一个网络。
答案:Equivalent to ^D (in bash) for cmd.exe?
没有。 * nix上的 Ctrl D 生成一个EOF,其中各种各样 shell解释为正在运行
exit
。相当于Windows上的EOF 是 Ctrl Z ,但cmd.exe不解释这个 特别是在提示符下输入时。
答案 1 :(得分:1)
Ctrl + D 将EOF
发送到标准输入并停止读取* nix。
看看here。
答案 2 :(得分:0)
您必须检查是否使用* nix或windows。
在Windows上,EOF由Ctrl+Z
表示,而在* nix上EOF由Ctrl+D
表示