Dúvida em C.

Boas.
Estou agora a fazer um programa em C que pede numeros ao ultilizador e no final mostra o maior, menor etc.
Para parar introdução de numeros deve-se pressionar 0 e o programa acaba e irá calcular o maior e menor e mostrar ao ultilizador.

O problema é que conta o 0 como numero, logo o menor é sempre 0, o que queria era que não contasse o 0 (que é para terminar a introdução) como numero.
 
Assumindo que estás a colocar os valores recebidos num array tens duas opções de resolver o problema:

1 - Só colocas o valor no array depois de verificares que não é 0.

2 - Crias uma varíavel, i, que é incrementada sempre que inseres um número no array. Quando inserires o 0, calculas o menor entre a posição 0 do array e a posição i-1.
 
Dá se passares um endereço como argumento, mas não sei até que ponto isso é complicar, depende do que andares a fazer.

Han? Acho que a solução passa por isto:

1 - Só colocas o valor no array depois de verificares que não é 0.

algo tipo

Código:
int i, valor;
int array[NUM_VALORES];

for(valor=1, i=0; valor!=0 && i<NUM_VALORES; i++){
   scanf("%d", &valor);
   if(valor!=0)
       array[i]=valor;
}

NUM_VALORES seria um limite que impoens ao array.

Cumps
 
Se tu chamares uma função com um endereço tipo:

funcao(&a);

E depois lá dentro alterares o a, é como se retornasses um segundo argumento.
 
Se tu chamares uma função com um endereço tipo:

funcao(&a);

E depois lá dentro alterares o a, é como se retornasses um segundo argumento.

true.

passas como argumento algo para ser escrito dentro da função e para além disso retornas algo

se bem que para o que ele quer não será o mais simples ou até indicado

é melhor usar um array de números como foi já explicado
 
Ora boas de novo.

Alguem me sabe dizer o porque de a função sair() não está a repetir o programa quando o utilizador mete 2?

void sair()
{
int sair;
printf("\t\tPretende sair (1) ou repetir (2) ?\n\n");
scanf("%d",&sair);
if(sair==1)
{
exit(0);
}
if(sair==2)
{
system("cls");
principal();
}
}


Se o utilizador por 2 o programa sai a mesma.
 
Precisava mesmo de ajuda para este problema visto que já me estou a baralhar todo, porque antes isso resultado mas agora foi testar e não resulta.
 
Não faço ideia porque é que isso não está a repetir o programa. Cheira-me que o problema está fora dessa função, digo eu.

Só queria dizer para não fazeres isto: main(); -> principal(); -> sair(); -> principal(); -> sair(); -> principal(); -> sair(); ...
 
Isso funcionava até eu introduzir um vetor no programa, depois deixou de dar.
Agora para recomeçar o programa tenho de chamar o main coisa que não queria.
 
O void principal está assim:

void principal()
{
int num,resto,num3,num4,numfat,i;
int cont=1,menorpar=0,menorimpar=0,maiorpar=0,maiorimpar=0,s;

printf("\n\t\tDigite pelo menos 10 n%cmeros ou mais:\n\n",163);
for(i=1;;i++)
{
printf("\t\t\t%d",cont);
printf("%c ",16);
scanf("%d",&num);
s=num;
if(num==0&&cont>10)
{
break;
}
if(num==0&&cont<10)
{
printf("\n\t\tTem de introduzir mais n%cmeros!\n\n",163);
continue;
}
resto=num%2;
cont+=1;
if(cont==4)
{
num3=num;
}
if(cont==5)
{
num4=num;
}
if(resto==0&&maiorpar==0)
{
maiorpar=num;
menorpar=num;
numfat=num;
}
if(resto==1&&maiorimpar==0)
{
maiorimpar=num;
menorimpar=num;
}
if(resto==0&&num>maiorpar)
{
maiorpar=num;
}
if(resto==0&&num<menorpar)
{
menorpar=num;
}
if(resto==1&&num>maiorimpar)
{
maiorimpar=num;
}
if(resto==1&&num<menorimpar)
{
menorimpar=num;
}
}
system("cls");
i=1;
graf();
printf("\t\t\tN%cmeros inseridos: \n",163);
while(i<cont)
{
printf("%c %d",16,s);
printf("\n");
i++;
}
printf("\n");
graf();
paresimp(maiorpar,menorpar,maiorimpar,menorimpar);
multi(num3);
divi(num4);
fato(numfat,maiorpar);
sair();


Foi quando introduzi o vetor que a função sair deixou de funcionar.
 
Última edição:
O void principal está assim:



Foi quando introduzi o vetor que a função sair deixou de funcionar.

Isso não estará a dar erro de compilação e não estarás a correr a "last stable version"? Porque acho muito estranho esse vector s, se quiseres um vector dinâmico tens que alocar a memória e não podes usar a variável declarada na linha anterior (poderias eventualmente ter um s caso i fosse uma variável global assim como o mauro1855) a não ser que tenha havido alguma "actualização á linguagem que eu não conheça.
 
O programa compila e corre tudo bem, as maravilhas.

Fui agora testar no C++ builder, e da erro no vetor.

Cada vez percebo menos do que se passa.
 
Última edição:
Isso erro de compilação em C não me parece ter. Declarar um array assim
Código:
 int s[i];
é válido. Um problema que pode surgir é o
Código:
int i;
não estar a ser inicializado. Não sei que compilador está a ser usado mas não é suposto ele inicializar a variável. O que é comum acontecer é o SO inicializar isso por ele se tiver espaço assim a zeros. Mas, mais uma vez, não é uma coisa previsivel por isso é bom ter algum cuidado para isso. Normalmente a solução é definir um tamanho máximo do array ou, como já dito, alocação dinâmica.

Não consegui perceber exactamente como fazes os calculos que queres porque código desse não identado custa a ler (usa [.code]código[./code] sem o . da proxima vês), mas é importante guardar a lista dos números introduzidos? Se sim, para quê?
 
Última edição:
Sim o importante é guardar a lista para depois os mostrar de novo.

O compilador é o DevC++ a versão se não me engano é a ultima.
Fiz agora outro programa da mesma forma, declarei o vetor v e int i e deu na perfeição.
 
Sim o importante é guardar a lista para depois os mostrar de novo.

O compilador é o DevC++ a versão se não me engano é a ultima.
Fiz agora outro programa da mesma forma, declarei o vetor v e int i e deu na perfeição.

Declarar o vector v e int i, como dizes, não faz sentido nenhum. Quanto muito ao contrário que é certamente o que estás a fazer.

Mas o que eu estava a falar não era sobre a declaração mas sim a inicialização. Fazendo como fazes, qual o tamanho que esperas que o array tenha? Isto é mais uma situação que os que sabem avisam e o pessoal, porque funciona, ignoram. É o tipo de erro que tu podes testar 1001 vezes e funcionar e no dia da defesa deixar de funcionar. O valor de i depois da declaração não é previsivel.

Já agora, segundo me lembro o DevC++ é um IDE e o compilador que usa é o GCC.

E outra coisa: qual é o erro que estás a ter?
 
Back
Topo