这是丹尼斯和S关于C语言的一本书的任务

练习1-13.编写一个程序来打印长度的直方图 它的输入中的单词.

这是我的代码(S没有完成,但我无法继续,因为我不知道发生了什么.):

#include<stdio.h>

#define MAXLENGTH   50

int main() {
  int c, wlength;
  int wlengths[MAXLENGTH];

  /* init array with 0s */
  for (int i = 0; i < MAXLENGTH; ++i)
    wlengths[i] = 0;

  wlength = 0;
  while((c = getchar()) != EOF) {
    if(c == ' ' || c == '\t' || c == '\n') {
        /* Word is finished, increase count for the length */
        ++wlengths[wlength];
        /* Reset the counter for the next word */
        wlength = 0;
    } else {
        /* Word is still going */
        ++wlength;
    }
  }

  printf("RESULTS:\n");
  for(int i = 0; i < MAXLENGTH; ++i) {
      printf("%d\n", wlengths[i]);
  }
  return 0;
}

编译启动程序(我也试用了GCC)

C:\Users\den\Documents\workspace\cexercixe> clang histogram.c
C:\Users\den\Documents\workspace\cexercixe> ./a.exe

然后我开始键入以下内容(用于测试):

a as asd asdf
123 123

输出:

RESULTS:
0

这对我来说毫无意义.谁能告诉我我做错了什么?我也试着添加了fflush(stdout),这并没有改变任何事情.

谢谢

推荐答案

在Windows终端上,您可以使用F6或Ctrl来模拟EOF,在Linux或其他类似Unix的操作系统上,它将是Ctrl或D(除非您将其更改为stty)

C++相关问答推荐

变量的const视图是否定义良好?

为什么在传输 Big Data 时共享内存段的运行时间比管道更长?

如何解决C中的严格别名?

为什么在C中二维字符数组会有这样的行为?

为什么在函数内部分配内存空间时需要添加符号?

SDL 2.0-从数组渲染纹理

如何跨平台处理UTF-16字符串?

N的值设置为0或1(未定义的行为),而我正在try 学习realloc和Malloc的用法

如何使解释器存储变量

用C++从外部ELF符号读取值

C整型和_泛型.哪些类型是兼容的?

C代码可以在在线编译器上运行,但不能在Leetcode上运行

For循环不会迭代所有字符串字符吗?(初学者问题)

在运行时判断C/C++指针是否指向只读内存(在Linux操作系统中)

有没有办法减少C语言中线程的堆大小?

在吉陀罗中,_2_1_和CONCAT11是什么意思?

unions 的原子成员是个好主意吗?

将size_t分配给off_t会产生符号转换错误

将char*数组深度复制到 struct 中?

C 中从 Unix 纪元时间转换的损坏