gpt4 book ai didi

c - EOF 之前没有换行符吗?

转载 作者:行者123 更新时间:2023-11-30 14:59:54 24 4
gpt4 key购买 nike

我正在解决 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
[][][][][]
[][][][][][]
[][][][]
[][]
[]

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

谢谢。

最佳答案

getchar()返回EOF时,循环结束,因此您永远不会在最后进入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++;
}
}
}

关于c - EOF 之前没有换行符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42428924/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com