好吧,我有这个简单的代码,它询问用户他想保存多少个数字,然后询问数字,每次用户输入数字时,程序打印他已经输入的数字并对数字进行排序从最低到最高。
问题是当用户告诉程序保存超过 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=#
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]);
}
}
最佳答案
这样做:
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
关于C程序不断崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18217636/