C EOF之前没有换行?
我正在解决K&R的一个练习,但我有一个小问题。 这个练习是打印输入中单词长度的柱状图 这是我的密码:C EOF之前没有换行?,c,C,我正在解决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
#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;
}
该程序的输出为:
Histogram
[][][][][]
[][][][][][]
[][][][]
[][]
[]
可以看出,程序在打印最后一个单词“text”的直方图之前终止。
这是因为Windows上的文本编辑器不会自动将“\r\n”放在末尾吗?如果是,如何解决此问题
多谢各位 循环在
getchar()
returnEOF
时结束,因此,如果结束,则永远不会进入else
例如:
#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++;
}
}
}
#包括
#包括
内部主(空){
printf(“直方图”);
尺寸长度=0;
bool running=true;
(跑步时){
开关(getchar()){
案例EOF:
运行=错误;
案例“”:
案例“\n”:
案例'\t':
案例'\r':
如果(len!=0){
printf(“\n”);
len=0;
}
打破
违约:
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;
}
尝试fflush(stdout)代码>在程序的末尾。您可以在文本编辑器中打开该文件,并在最后一行添加换行符。如果len不是0,则在退出循环时再执行一步打印。如果不希望循环终止,则循环终止。将终止条件更改为您真正想要的条件。(EOF和len==0)。
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;
}