Porque o código não está compilando ? - C/C#/C++ - Clube do Hardware
Porque o código não está compilando ?
Por zennom, 25 de fevereiro de 2016 em C/C#/C++
preciso fazer um exercício com base em uma tabela.
No arquivo de entrada preciso inserir dois valores inteiros correspondentes ao código e a quantidade do item de uma tabela.
Então pensei em utilizar SWITCH. Ai é só o usuario digitar o código e a quantidade.. só que o meu código não está compilando!
qual seria o problema? Também tenho duvidas em relação ao SWITCH não sei se foi porque eu coloquei muitos comandos.
int codigo,quantidade,total;
switch (codigo)
scanf("%d", & quantidade);
total = quantidade * 4.00;
printf("Total: R$ %d\n",& total); break;
total = quantidade * 4.50;
total = quantidade * 5.00;
total = quantidade * 2.00;
total = quantidade * 1.50;
Você não ta pegando um valor para a variavel codigo, então provavelmente a variavel está com um lixo de memoria que bugando o codigo.
Você tá usando & nos printf sendo que nao é para usar.
printf("Total: R$ %d\n", total);
Você também podia colocar um default no seu switch, caso o usuario digite um codigo invalido.
printf("Codigo invalido.\n");
Editado 26 de fevereiro de 2016 por MassakiMsk
vou fazer esses ajustes e posto aquui se consegui!!
FIZ ALGUNS AJUSTES RECOMENDADOS, ELE ATÉ COMPILOU.. MAS FOI DIRETO PRO DEFAULT...
scanf("%d", & codigo);
printf("Total: R$ %d\n", total); break;
@zennom Use as tags <> no menu de postagem para organizar seu código.
Você tem que digitar o código e o preço somente 1 vez, e antes de entrar no switch.
int codigo, quantidade, total;
scanf ( "%d", & codigo );
scanf ( "%d", & quantidade );
switch ( codigo ) {
printf ( "1" );
printf ( "Total: R$ %d\n", total );
printf ( "2" );
printf ( "3" );
printf ( "4" );
printf ( "5" );
printf ( "Codigo invalido.\n" );
Oi de novo Zennon . . .
Bom é exatamente o que disseram MassakiMsk e CiroboyBR apenas complementando . . .
- Os cinco alertas seguintes são relativos ao fato de você ter colocado " & " para as suas variáveis dentro do printf(); o que não é necessário:
|16|warning: format '%d' expects argument of type 'int', but argument 2 has type 'int *' [-Wformat=]|
|23|warning: format '%d' expects argument of type 'int', but argument 2 has type 'int *' [-Wformat=]|
|30|warning: format '%d' expects argument of type 'int', but argument 2 has type 'int *' [-Wformat=]|
|38|warning: format '%d' expects argument of type 'int', but argument 2 has type 'int *' [-Wformat=]|
|45|warning: format '%d' expects argument of type 'int', but argument 2 has type 'int *' [-Wformat=]|
- Os dois alertas seguintes estão lhe alertando para o fato de você não ter definido o tipo da função main()
|4|warning: return type defaults to 'int' [-Wreturn-type]|
como você não definiu o tipo, o compilador tomou a liberdade de o definir como sendo " int "
|51|warning: control reaches end of non-void function [-Wreturn-type]|
como a função main(), foi definida como sendo do tipo " int " ela deve retornar algum valor, sendo assim você deve colocar um valor de retorno antes da ultima chave de fechamento da função main():
- Este é o seu principal problema, e é exatamente o que nos e o alerta queremos lhe dizer
|8|warning: 'codigo' is used uninitialized in this function [-Wuninitialized]|
O alerta está lhe alertando que a variável " código " está sendo utilizada no código sem que antes ela fosse inicializada com algum valor, para evitar usar o lixo de memoria.
Mas especificamente, está mensagem esta associada ao fato de que quando você vai utilizar uma variável, em uma estrutura de controle, como:
É sempre bom você definir um valor ( inicializar ) a variável com um valor nulo para evitar que a mesma use lixo de memoria, dados ( valores ) armazenados naquela porção de memoria e que não foi apagado.
E é exatamente esse o motivo para o seu programa pular direto para o default, já que o valor é diferente de qualquer case dentro do switch, tente colocar um printf(), antes do switch para mostrar o valor que está sendo armazenado pela variável " código "
Bom era isso . . tente seguinr as dicas postadas acima por todos nós e o codigo vai rodar liso . . .