0

さて、私はこの単純なコードを持っています。ユーザーに保存したい数字の数を尋ね、次に数字を尋ねます。ユーザーが数字を書くたびに、プログラムは彼がすでに書いた数字を出力し、数字を最小から順に並べ替えます最高。

問題は、ユーザーがプログラムに 9 つ以上の数字を保存するように指示すると、プログラムが停止することです。ユーザーが 8 つ以下の数字を保存することを選択した場合、プログラムは完全に機能します。何が起こっているのかわかりません、あなたの助けに感謝します

変数およびその他の用語は、私の言語であるスペイン語に基づいています。ここにいくつかの翻訳があります。

関数guardaNum: 数値を配列に保存します

関数 ordena: 配列の番号を並べ替える

関数 imprime: 配列を出力します

contador: カウンターです

cant: ユーザーが節約したい数です。

ご協力いただきありがとうございます!

#include <stdio.h>
int guardaNum(int *pnum,int lista[],int *pcontador);
int ordena(int lista[],int *pcontador);
void imprime(int lista[],int *pcant);

int main(void)
{
  int cant, num, *pnum, lista[cant], i,contador,*pcontador ;
  printf("Ingrese la cantidad de numeros que desea agregar a la lista: \n");
  scanf("%d", &cant);

  for(i=0;i<cant;i++)
    {
      lista[i]=-99;
    }

  for(i=0;i<cant;i++)
    {
      printf("Ingrese un Numero: ");
      scanf("%d",&num);

      pnum=&num;
      contador=i;
      pcontador=&contador;

      guardaNum(pnum,lista,pcontador);
      ordena(lista,pcontador);
      imprime(lista,pcontador);
    }

}

int guardaNum(int *pnum,int lista[],int *pcontador)
{
  lista[*pcontador]=*pnum;
  return 0;

}

int ordena(int lista[], int *pcontador)
{
  int i,j, temp;

  for(j=0;j<*pcontador;j++)
    {
      for(i=0;i<*pcontador;i++)
    {

      if(lista[i]>lista[i+1])
        {
          temp=lista[i+1];
          lista[i+1]=lista[i];
          lista[i]=temp;
        }
    }
    }
}

void imprime(int lista[],int *pcontador)
{
  int i;
  for(i=0;i<=*pcontador;i++)
    {
      printf("%d\n",lista[i]);
    }
}
4

3 に答える 3

1

実際に入力として受け取る前に、サイズとして「cant」を使用して配列を定義することに注意してください。可能な最大配列サイズが必要です(そしてそれに対して入力をよりよく確認してください)、または方法がわかっている場合は配列を動的に割り当てます

于 2013-08-13T19:39:37.430 に答える
1

この行で:

int cant, num, *pnum, lista[cant], i,contador,*pcontador ;

初期化されていない状態で使用cantしています。listaサイズを入力したら、beの宣言を移動する必要があります。

于 2013-08-13T19:38:29.307 に答える