O que estará aqui mal?

RiseTheS33D

Membro
Boas sou novo tanto como membro e como programador. Tenho andado á procura do porquê do erro mas não consigo entender o que é necessário fazer para que o erro desapareça.

Estou a usar o Visual Studio 2013, a programar em linguagem C e apareceu-me o erro :
error C4700: uninitialized local variable 'maior' used


#include <stdio.h>
#include <conio.h>


void main()

{
int x, y, z, maior;
printf("Este programa mostra o maior numero entre os 3. Introduza os valores para as 3 variaveis\n\n");
scanf_s("%d%d%d", &x, &y, &z);

if (x > y)
x = maior;
else y = maior;
if (z > maior)
maior = z;

printf("O maior numero e %d", maior);
_getch();

}
 
Última edição:
Acho que o erro te está a dizer +/- o porquê de não funcionar, mas se não chegas lá compara o bloco de instruções do primeiro if else com o do segundo if.
Qualquer questão apita!
 
Tal como diz o erro, tens uma variável que não foi inicializada. Provavelmente o que tu queres fazer é:

if (x > y)
maior=x;
else maior=y;
if (z > maior)
maior = z;

De qualquer modo, podes sempre inicializar a variável com o valor zero -> int maior = 0; Dessa forma, já não terás o erro.
 
Não te falta a definição da função main?!

Eu esqueci-me de copiar essa linha para aqui xD
O problema continua a ser da variavel não ter sido inicializada.

Tal como diz o erro, tens uma variável que não foi inicializada. Provavelmente o que tu queres fazer é:

if (x > y)
maior=x;
else maior=y;
if (z > maior)
maior = z;

De qualquer modo, podes sempre inicializar a variável com o valor zero -> int maior = 0; Dessa forma, já não terás o erro.

Eu acho que não estou a entender é o significado... Tipo "maior" está definida portanto está pronta a ser utilizada né? Ela será inicializada quando for necessária né?

Acho que o erro te está a dizer +/- o porquê de não funcionar, mas se não chegas lá compara o bloco de instruções do primeiro if else com o do segundo if.
Qualquer questão apita!

Eu estou a ver o que ele diz, mas entender o porque disso acontecer é que não estou a ver xD Qualquer variavel que seja usada não é inicializada?




----------------------------------------------------------------------------------------------------------------------------------------------------------
Um obrigado a todos desde já pela ajuda xD
 
Última edição:
Uma coisa é declarares uma variável. Outra é inicializa la, isto é, atribuir lhe um valor. Estas a querer usar a variável sem ainda lhe teres dado um valor.
 
Na prática, imagina:
Eu dou-te uma folha de papel branca. Agora pergunto-te: O que está escrito nessa folha é maior que 4?

Como é óbvio não sabes, a folha que te dei está em branco.

Portanto não só tens de declarar a variável (que já fizeste) como também tens de lhe de dar um valor inicial antes de a comparares com qualquer outro valor.

Por exemplo, se os teus valores x, y e z forem sempre positivos, podes inicializar maior como zero. No entanto normalmente aquilo que se faz nessas situações é inicializar a variável com um dos valores que estás a querer comparar.

Por exemplo:

Código:
maior = y;
if (x > y) {
  maior = x;
}
 
mplo, se os teus valores x, y e z forem sempre positivos, podes inicializar maior como zero. No
Na prática, imagina:
Eu dou-te uma folha de papel branca. Agora pergunto-te: O que está escrito nessa folha é maior que 4?

Como é óbvio não sabes, a folha que te dei está em branco.

Portanto não só tens de declarar a variável (que já fizeste) como também tens de lhe de dar um valor inicial antes de a comparares com qualquer outro valor.

Por exemplo, se os teus valores x, y e z forem sempre positivos, podes inicializar maior como zero. No entanto normalmente aquilo que se faz nessas situações é inicializar a variável com um dos valores que estás a querer comparar.

Por exemplo:

Código:
maior = y;
if (x > y) {
  maior = x;
}
Uma coisa é declarares uma variável. Outra é inicializa la, isto é, atribuir lhe um valor. Estas a querer usar a variável sem ainda lhe teres dado um valor.

-------------------------------------------------------------------------------------------------------------------------------------------------------------
Ah! Estava a confundir termos. Já percebi o que é inicializar que é atrabuir um valor, mas porque razão tenho de atribuir um valor a "maior" se ele supostamente é como se adopta-se cada um dos valores das variáveis x, y ou z? Inicializando x,y e z e sendo "maior" uma delas dependendo do resultado, não devia automaticamente ser considerada inicializada?
 
-------------------------------------------------------------------------------------------------------------------------------------------------------------
Ah! Estava a confundir termos. Já percebi o que é inicializar que é atrabuir um valor, mas porque razão tenho de atribuir um valor a "maior" se ele supostamente é como se adopta-se cada um dos valores das variáveis x, y ou z? Inicializando x,y e z e sendo "maior" uma delas dependendo do resultado, não devia automaticamente ser considerada inicializada?


O problema é que a primeira vez que usas a variável maior não lhe estás a atribuir um valor mas sim a dar o valor dela a outra variável:
Código:
x = maior;

x toma o valor de maior, mas ainda não disseste qual o valor de maior. Como disse o @robz, deves querer é o inverso, maior = x; Neste caso não tens problema já que o primeiro uso da variável é uma atribuição.
 
O problema é que a primeira vez que usas a variável maior não lhe estás a atribuir um valor mas sim a dar o valor dela a outra variável:
Código:
x = maior;

x toma o valor de maior, mas ainda não disseste qual o valor de maior. Como disse o @robz, deves querer é o inverso, maior = x; Neste caso não tens problema já que o primeiro uso da variável é uma atribuição.

Basta falhar num pequeno detalhe e pronto... Aprendi mais aqui do que nas aulas! xD Obrigado!
 
Com o desenvolver dos exercicios, tenho aqui outro erro manhoso a lixar-me o esquema xD
O programa deveria converter os valores consoante a unidade que quisesse converter mas nada faz... Passa logo para a linha default sempre que atribuo um numero. E quando atribuo um numero á variável conv o programa deixa-me atribuir qualquer valor, quando este não deveria me deixar fazê-lo...

#include <stdio.h>
#include <conio.h>


void main()

{
//F1-ex4
float x, y;
int conv;

printf("1.cm->pol; 2.kg->lbs; 3.l->gal; 4.C->F\n\n");
scanf_s("%d", &conv);

printf("Qual o valor a ser convertido?");
scanf_s("%f", &x);

switch (conv)
{


case 1:
y = x / 2.54;
printf("O valor em pol e: %f", y);
break;

case 2:
y = x / 0.4536;
printf("O valor em libras e: %f", y);
break;

case 3:
y = x / 3.785;
printf("O valor em gal e: %f", y);
break;

case 4:
y = 1.8*x + 32;
printf("O valor em Fahrenheit e: %f", y);
break;

default: printf("operacao invalida");
break;

}

_getch();

}
 
Última edição:
Eu já não toco em C há tipo 10 anos mas porque é que tens os casos do teu case dentro de plicas? Assim são characters em vez de ints.
 
O que acontece agora? Continua a ir para o default?
Faz um print do conv pra ver o que está lá.

A mim é essa a sensação que me passa. E desculpa a minha ignorância mas o que queres dizer com o print? Queres dizer para compilar apenas uma das linhas? ou transmitir a mensagem para o utilizador?

Porque estás a usar scanf_s em vez de scanf?
Eu estou a usar o scanf_s porque o scanf me dá erro (
Error 1 error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\users\utilizador\documents\visual studio 2013\projects\project1\project1\source.cpp 58 1 Project1
)
 
A mim é essa a sensação que me passa. E desculpa a minha ignorância mas o que queres dizer com o print? Queres dizer para compilar apenas uma das linhas? ou transmitir a mensagem para o utilizador?
Posta o output. Provavelmente é o velho problema dos buffers. Tenta colocar a seguinte linha depois de cada scanf:
Código:
while (getchar()!='\n');

Acrescenta também um \n no fim de cada printf.

Eu estou a usar o scanf_s porque o scanf me dá erro (
Error 1 error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\users\utilizador\documents\visual studio 2013\projects\project1\project1\source.cpp 58 1 Project1
)

Windowsisses
 
josearagao5, qual é suposto ser o problema? Qual é o warning que dá?
Além disso, não metas código assim, usa a tag code sff

Código:
// copy paste do codigo
 
Back
Topo