[英]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.