问题是当用户告诉程序保存超过9个号码时,程序就会停止,如果用户选择保存8个或更少的号码,它就可以完美运行。我不知道发生了什么,我将非常感谢你的帮助
变量和其他术语基于我的语言,西班牙语,这里有一些翻译:
function guardaNum:将数字保存在数组
中函数ordena:排序数组的数字
function 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]);
}
}
答案 0 :(得分: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
答案 1 :(得分:1)
在这一行:
int cant, num, *pnum, lista[cant], i,contador,*pcontador ;
您在未初始化时使用cant
。在输入大小后,您必须将lista
的声明移动。
答案 2 :(得分:1)
请注意,您使用&#34; cant&#34;定义数组。作为之前的大小,您实际上将其作为输入。 您需要一个最大可能的数组大小(并且更好地检查您的输入),或者如果您知道如何 - 动态分配数组