2 qq 17526699 qq_17526699 于 2015.07.20 14:47 提问

Unhandled Exception 弹出窗口报错

《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发现在这条语句处断开:
图片说明

请问这个错误的原因是什么?该如何修改代码?十分感谢~

1个回答

oyljerry
oyljerry   Ds   Rxr 2015.07.20 21:56

cSave访问索引i是不是数组越界了。

oyljerry
oyljerry 回复Cache_use_only: 对,iLength访问的iCount也可能越界
2 年多之前 回复
qq_17526699
qq_17526699 可是有时break之后指向iLength[iCount] = iLength[iCount] + 1;语句,是不是iLength越界?
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片