Ajuda no programa de C | ZWAME Fórum
Ajuda no programa de C
Discussão em 'Programação' iniciada por n0ob, 9 de Maio de 2012. (Respostas: 5; Visualizações: 810)
Olá=D...
Ao executar o seguinte código, este deixa de responder e fecha...
O objectivo do programa é pedir um numero de valores a introduzir e indicar o maximo, o minimo e a media...
int n, i, max ,min, soma;
printf("Indique o valor de numeros desejados: ");
{ printf("Coloque o valor desejado\n: ");
scanf(" %d", &vector); /*Corresponder a cada posição o valor introduzido*/
/*Suposições...*/
vector[0]=max;
vector[0]=min;
for(i=0;n<i;i++)
if(vector>vector[0])
/*Percorridos os numeros incluidos nos vectores para ver se existe
algum maior (para maximo) ou menos(para minimo)*/
max=vector;
if(vector<vector[0])
min=vector;
printf("Ora ai está o maximno = %d\n",max);
printf("Ora ai está o minimo = %d\n",min);
for(i=0, soma=0;n<i;i++)
soma=soma+vector;
media=(soma)/(n);
printf("Ora ai está a media ;_) = %f\n",media);
Olha não é que perceba muito disto... mas não podes ter um vector com tamanho "n"... tens que definir um valor ou uma constante...
for(i=0;n<i;i++)tu podes fazer o 1 array dessa forma, mas a variável tem de estar inicializada, o que não é o caso. Também tens alguns loops mal como este for(i = 0; n<i;i++). teria de ser for(i = 0; i < n; i++)
O problema mais "gritante" que está aí é mesmo a declaração int vector[n];
Não podes declarar um vector com um tamanho n que não está inicializado quando essa declaração é feita (e não te eskeças que o código é executado sequencialmente).
Aquilo que tens de fazer, e possivelmente ainda não aprendeste esta forma é: invés de declarares um int vector[n], declaras um ponteir char * vector;
Depois fazes o scanf para obter o n e, logo e seguida, como já tens o n, fazes vector = malloc(n * sizeof(int));
Assim ficas com um vector de tamanho n. Chama-se a isto alocação de memória dinâmica, e é boa prática libertar a memória que se aloca dinamicamente no final do programa, portanto, antes de fazer o exit no final/antes de fazeres system("pause");, convém fazeres free(vector);
Desculpem o tamanho dos meus erros
Mt obg pela dica da alocação da memoria
Não tem a ver com a altura onde a declaração é feita, todas as variáveis locais são alocadas no stack, e é necessário conhecer o seu tamanho em compile-time. A varíavel só vai ter um valor em run-time, logo isso é independente do local onde colocas o n.
PS: O standard C99 já permite VLA's (variable length arrays) onde podes definir um array com tamanho variável sem o alocar dinamicamente no heap.