Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gustavo Rodrigues Torre

Problema

Recommended Posts

Estou com problemas nestes dois programas

O que esta errado neles?

 

1º Código

 

/*Program menu*/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

float quantidade,p_f;
char codigo;

main()

{									  

printf("\nCodigo do produto");
printf("\nABCD");
printf("\nXYPK");
printf("\nKLMP");
printf("\nQRST");
printf("\nDigite um codigo do menu: ");
scanf("%c",&codigo);
printf("\nEntre com a quantidade desejada: ");
scanf("%f",&quantidade);

switch (codigo)

{
case 'ABCD' : p_f = quantidade * 5.30;break;
case 'XYPK' : p_f = quantidade * 6.00;break;
case 'KLMP' : p_f = quantidade * 3.20;break;
case 'QRST' : p_f = quantidade * 2.50;break;

}
printf("\nO valor devido e R$ %.2f",p_f);
printf("\n\n");

system("pause");
return 0;

}

 

2º Código

 

/*Programa casos e condiçoes*/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

main()
{									  
float salario,nsalario,di;
int codigo;
char cargo;

printf("\n101 - Gerente");
printf("\n102 - Engenheiro");
printf("\n103 - Tecnico");
printf("\nEntre com o seu salario atual:");
scanf("%f",&salario);
printf("\nEntre com o codigo do seu cargo: ");
scanf("%c",&codigo);


switch (codigo)

{
case 101 : nsalario = salario * 110/100;break;
case 102 : nsalario = salario * 115/100;break;
case 103 : nsalario = salario * 110/100;break;
default : nsalario = salario * 140/100;
}


di = nsalario - salario;
   
printf("\nsalario antigo %.2f ",salario);
printf("\nnovo salario %.2f ",nsalario);
printf("\na difrenca e de %.2f ",di);

printf("\n\n");

system("pause");
return 0;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gustavo no q observei :

no 1º - você escreve os codigos na tela somente.. e fala pro usuario digitar um codigo q soh aceita um caracter observer

scanf("%c",&codigo);
e depois você diz q :
switch (codigo)

{
case 'ABCD' : p_f = quantidade * 5.30;break;
nunca vai ser nenhuma das opções pois a variavel codigo recebe somente um caracter.. faça assim:

char codigo[4] //na hr da declaração
//
gets(codigo) //na hr da leitura

no 2º - você declara codigo como inteiro e o le como caracter, observe como você fez:

int codigo;
scanf("%c",&codigo);
você precisa ler o codigo assim:

scanf("%d",&codigo);

Volte a postar c tiver duvidas!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz o q você pediu mas esta dando erro

 

/*Program menu*/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

float quantidade,p_f;
char codigo[4]

main()

{									  

printf("\nCodigo do produto");
printf("\nABCD");
printf("\nXYPK");
printf("\nKLMP");
printf("\nQRST");
printf("\nDigite um codigo do menu: ");
gets(codigo)
printf("\nEntre com a quantidade desejada: ");
scanf("%f",&quantidade);

gets (codigo)

{
case 'ABCD' : p_f = quantidade * 5.30;break;
case 'XYPK' : p_f = quantidade * 6.00;break;
case 'KLMP' : p_f = quantidade * 3.20;break;
case 'QRST' : p_f = quantidade * 2.50;break;

}
printf("\nO valor devido e R$ %.2f",p_f);
printf("\n\n");

system("pause");
return 0;

}

Gustavo no q observei :

no 1º - você escreve os codigos na tela somente.. e fala pro usuario digitar um codigo q soh aceita um caracter observer

scanf("%c",&codigo);
e depois você diz q :
switch (codigo)

{
case 'ABCD' : p_f = quantidade * 5.30;break;
nunca vai ser nenhuma das opções pois a variavel codigo recebe somente um caracter.. faça assim:

char codigo[4] //na hr da declaração
//
gets(codigo) //na hr da leitura

no 2º - você declara codigo como inteiro e o le como caracter, observe como você fez:

int codigo;
scanf("%c",&codigo);
você precisa ler o codigo assim:

scanf("%d",&codigo);

Volte a postar c tiver duvidas!

Compartilhar este post


Link para o post
Compartilhar em outros sites

coloque ';' para finalizar a linha do char codigo[4]

 

com o gets você le uma string

você colocow gets no lugar do switch

 

coloque assim novamente:

switch (codigo)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu coloquei ; no fim da linha char codigo[4]

 

E agora esta dando erro nesta linha aqui

 

 

printf("\nDigite um codigo do menu: ");
gets(codigo)
printf("\nEntre com a quantidade desejada: ");
scanf("%f",&quantidade);

coloque ';' para finalizar a linha do char codigo[4]

 

com o gets você le uma string

você colocow gets no lugar do switch

 

coloque assim novamente:

switch (codigo)

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha gustavo eu num tenho o compilador aki te darei uma resposta concreta anoite qnd for na lan!!

 

adicione esse comando antes do gets(codigo);

fflush(stdin);
ele limpa o buffer do teclado.. bom é um teste..

aguardo respostas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha gustavo eu fiz assim no mew e deu certo:

for (int i=0;i<=4;i++) {
switch (codigo[i])
{
case 'ABCD' : p_f = quantidade * 5.30;break;
case 'XYPK' : p_f = quantidade * 6.00;break;
case 'KLMP' : p_f = quantidade * 3.20;break;
case 'QRST' : p_f = quantidade * 2.50;break;
}
}
usei um laço for pq o switch tem q ler tds os caracteres digitados.!!

 

testa ae

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas eu gostaria que fosse feito sem o for.

Usando apenas o switch

Olha gustavo eu fiz assim no mew e deu certo:

for (int i=0;i<=4;i++) {
switch (codigo[i])
{
case 'ABCD' : p_f = quantidade * 5.30;break;
case 'XYPK' : p_f = quantidade * 6.00;break;
case 'KLMP' : p_f = quantidade * 3.20;break;
case 'QRST' : p_f = quantidade * 2.50;break;
}
}
usei um laço for pq o switch tem q ler tds os caracteres digitados.!!

 

testa ae

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz assim mas o Dev-C++ rodou o programa mas exibiu umas msg de erros

 

]/*Program menu*/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

main()
{									  
float quantidade,p_f;
char codigo[4];

printf("\nCodigo do produto");
printf("\nABCD");
printf("\nXYPK");
printf("\nKLMP");
printf("\nQRST");
printf("\nDigite um codigo do menu: ");
gets(codigo);
printf("\nEntre com a quantidade desejada: ");
scanf("%f",&quantidade);

for (int i=0;i<=4;i++) {
switch (codigo[i])
{
case 'ABCD' : p_f = quantidade * 5.30;break;
case 'XYPK' : p_f = quantidade * 6.00;break;
case 'KLMP' : p_f = quantidade * 3.20;break;
case 'QRST' : p_f = quantidade * 2.50;break;
}
}

printf("\nO valor devido e R$ %.2f",p_f);
printf("\n\n");

system("pause");
return 0;

}

Mas eu gostaria que fosse feito sem o for.

Usando apenas o switch

Olha gustavo eu fiz assim no mew e deu certo:

for (int i=0;i<=4;i++) {
switch (codigo[i])
{
case 'ABCD' : p_f = quantidade * 5.30;break;
case 'XYPK' : p_f = quantidade * 6.00;break;
case 'KLMP' : p_f = quantidade * 3.20;break;
case 'QRST' : p_f = quantidade * 2.50;break;
}
}
usei um laço for pq o switch tem q ler tds os caracteres digitados.!!

 

testa ae

Compartilhar este post


Link para o post
Compartilhar em outros sites

Há repetições?

 

Se sim tem que ter um loop, ai fica a seu critério avaliar while, do while ou for.

 

Sim rodou

Eu corrigi o erro.

Agora só falta este primeiro programa ser resolvido sem o uso do for

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz algumas observações com comentários e alterei algo, veja se resolve.

 

/*Program menu*/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

float quantidade,p_f;

char codigo; //esse tipo de variável armazena somente um caracter

main()

{									  

printf("\nCodigo do produto");
printf("\nA");
printf("\nX");
printf("\nK");
printf("\nQ");
printf("\nDigite um codigo do menu: ");

//para ler uma string use o comando gets
gets(codigo); 

printf("\nEntre com a quantidade desejada: ");
scanf("%f",&quantidade);


//O resultado de expressões no comando switch, no 
//caso variável codigo, deve ser inteiro ou char, e nunca uma string
//Se mesmo assim não der certo, tente fazer seu menu com inteiros.

switch (codigo)

{
case 'A' : 
p_f = quantidade * 5.30;break;
case 'X' : 
p_f = quantidade * 6.00;break;
case 'K' : 
p_f = quantidade * 3.20;break;
case 'Q' : 
p_f = quantidade * 2.50;break;

}
printf("\nO valor devido e R$ %.2f",p_f);
printf("\n\n");

system("pause");
return 0;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Funcionou não

 

Deu erro no gets

 

 

Fiz algumas observações com comentários e alterei algo, veja se resolve.

 

/*Program menu*/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

float quantidade,p_f;

char codigo; //esse tipo de variável armazena somente um caracter

main()

{									  

printf("\nCodigo do produto");
printf("\nA");
printf("\nX");
printf("\nK");
printf("\nQ");
printf("\nDigite um codigo do menu: ");

//para ler uma string use o comando gets
gets(codigo); 

printf("\nEntre com a quantidade desejada: ");
scanf("%f",&quantidade);


//O resultado de expressões no comando switch, no 
//caso variável codigo, deve ser inteiro ou char, e nunca uma string
//Se mesmo assim não der certo, tente fazer seu menu com inteiros.

switch (codigo)

{
case 'A' : 
p_f = quantidade * 5.30;break;
case 'X' : 
p_f = quantidade * 6.00;break;
case 'K' : 
p_f = quantidade * 3.20;break;
case 'Q' : 
p_f = quantidade * 2.50;break;

}
printf("\nO valor devido e R$ %.2f",p_f);
printf("\n\n");

system("pause");
return 0;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

o gets le strings apenas

use o getchar caso queira ler caracteres sem o scanf

 

faça assim:

codigo = getchar(); 

switch (codigo)

{

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.