[英]Why the code goes into Infinite Loop
我剛開始使用C,並且一直關注Kernighan和Ritchie撰寫的“ The C Programming Language”第二版。 我正在解決Excercise 1.14來打印字符頻率的直方圖。 這是我的代碼
#include<stdio.h>
#define FIRST_GRAPHIC_CHAR 32
#define LAST_GRAPHIC_CHAR 126
#define NUM_GRAPHIC_CHARS (LAST_GRAPHIC_CHAR - FIRST_GRAPHIC_CHAR + 1)
int main(void)
{
int c,thisval,maxval,i,j;
int frequency[NUM_GRAPHIC_CHARS] = { 0 };
c=getchar();
while(c>=FIRST_GRAPHIC_CHAR && c<=LAST_GRAPHIC_CHAR && c != '\n')
{
++frequency[c-FIRST_GRAPHIC_CHAR];
c=getchar();
}
printf("CASE \t\tOccurences\n");
for(i=0;i<=NUM_GRAPHIC_CHARS;i++)
{
if(i+FIRST_GRAPHIC_CHAR == ' ')
{
printf("<space> |\t");
for(j=0;j<frequency[i];j++)
{
printf("*");
}
printf("\n");
}
else
{
printf("%c \t|\t",i+FIRST_GRAPHIC_CHAR);
for(j=0;j<frequency[i];j++)
{
printf("*");
}
printf("\n");
}
}
return(0);
}
現在我的問題是,當我運行這段代碼時,程序會進入無限循環,但是當我使用表達式時
j<frequency[i] istead of
j<=frequency[i]
在for循環中它可以完美工作。現在我不明白為什么會進入無限循環? 務必告訴代碼是否有問題。
您的代碼中有未定義的行為 。 外循環從0
到NUM_GRAPHIC_CHARS
含) ,但是您必須記住,數組的索引從0
到其大小減去一,因此您會超出frequency
數組的范圍。
該越界條目的價值是什么? 沒有人知道,但是因為它可能很大,所以內部循環可能會花費一些時間,甚至看起來是無限的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.