《C程序设计语言》 练习1-13:编写一个程序,打印输入中单词长度的直方图。水平方向的直方图比较容易绘制,垂直方向的直方图则要困难一些。
本人源代码,编译通过(无Warning):
#include
void main()
{
printf("Input, End with \"Enter then Ctrl + Z\"\n");
char cRecieve;
static char cSave[100];
int iNum, iCount = 0,iLength[20];
//-----------储存输入字符至cSave---------
for (iNum = 0; (cRecieve = getchar()) != EOF; iNum++)
{
cSave[iNum] = cRecieve;
}
for (int i = 0; i < iNum; i++)
{
while(true)
{
if (cSave[i] == ' '||cSave[i] == '\t'||cSave[i] == '\n')
{
i++; //跳过空格
}
else
{
while (true)
{
iCount++; //数单词长度用
i++;
if (cSave[i] == ' ' || cSave[i] == '\t' || cSave[i] == '\n') //遇空格结束数字数动作
{
iLength[iCount] = iLength[iCount] + 1; //对应长度的总数加一
break;
}
}
}
}
}
//-----------打印直方图------------------
printf("\n\t------Histogram-------\n");
for (int iTemp = 0;iTemp == 20; iTemp++)
{
if (iLength[iTemp] != 0) //若无单词长度为iLength[iTemp]则跳到下一个
{
printf("%3d:", iLength[iTemp]);
for (int i = 0; i < iLength[iTemp]; i++)
{
printf("*"); //横向打印直方图
}
}
}
}
运行时:
(^Z模拟EOF,测试有效)然后再按回车,弹出报错窗口:
选择Continue会再次弹出,选择Break发现在这条语句处断开:
请问这个错误的原因是什么?该如何修改代码?十分感谢~