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

做这个:

int main(void)
{
  int cant, num, *pnum, i,contador,*pcontador ;
  int *lista;
  printf("Ingrese la cantidad de numeros que desea agregar a la lista: \n");
  scanf("%d", &cant);
  lista = malloc(sizeof(int)*cant);
  if(!lista){
    perror("error on malloc");
    exit(1);
  }

  //continue with your code
  free(lista);
}

您的代码的问题是无法初始化,因此编译器不知道您的数组需要多少空间。

或者你可以这样做:

scanf("%d", &cant);
int lista[cant]
//continue with your code
于 2013-08-13T19:37:43.930 回答
1

在这一行:

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

您正在使用cant它未初始化。lista输入尺寸后,您必须将您的声明移动到。

于 2013-08-13T19:38:29.307 回答
1

请注意,在实际将其作为输入之前,您将使用“cant”定义为大小的数组。您将需要一个最大可能的数组大小(并更好地检查您的输入),或者如果您知道如何 - 动态分配数组

于 2013-08-13T19:39:37.430 回答