簡體   English   中英

為什么代碼進入無限循環

[英]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循環中它可以完美工作。現在我不明白為什么會進入無限循環? 務必告訴代碼是否有問題。

您的代碼中有未定義的行為 外循環從0NUM_GRAPHIC_CHARS 含) ,但是您必須記住,數組的索引從0到其大小減去一,因此您會超出frequency數組的范圍。

該越界條目的價值是什么? 沒有人知道,但是因為它可能很大,所以內部循環可能會花費一些時間,甚至看起來是無限的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM