Logo Hardware.com.br
INTEL_KILLER
INTEL_KILLER Zerinho Registrado
1.2K Mensagens 4 Curtidas

Ajuda com programa iniciante em C

#1 Por INTEL_KILLER 03/04/2009 - 16:14
Olá a todos, estou no primeiro semestre de ciências da computação, eu sou autonomo e gostaria de fazer um programa pra mim calcular os orçamentos que eu faço para passar para o cliente, fiquei a tarde toda fazendo um programa seguindo o algoritmo certinho, o programa ta rodando mais ta com erro de lógica eu axo, o switch não ta funcionando, eu escolho a opção 1 e ele execulta a 1 só q em seguida executa a 2, 3, 4 e ele entra em todos os if/else mesmo sendo pra execultar só 1 ele faiz os 2, to que nem loco tentando arrumar isso e como não consegui gostaria de colocar o código fonte aqui para vocês analisar e me ajudar...

Agradeço!

Segue o código


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

main () {

float precog, precoav, preco3x, preco6x, preco9x;
float ganho, j1x, j3x, j6x, j9x;
ganho=1.10; j1x=1.00; j3x=1.06; j6x=1.12; j9x=1.18;
int op, op2, op3;
char escolha='n', escolha2='s';

while(escolha=='n') {
system("cls&quot;
printf("<<== Programa Orcamento ==>>\n&quot;
printf("\n1. Orcamento.\n2. Tabelas.\n3. Alterar Dados.\n4. Sair\n\nEscolha uma opcao: &quot;
scanf("%i",&op);
switch(op)
{
case 1:
system("cls&quot;
printf("<<== Orcamento ==>>\n&quot;
printf("\nInsira o valor: &quot;
scanf("%f",&precog);
precoav=precog*ganho;
preco3x=(precoav*j3x)/3;
preco6x=(precoav*j6x)/6;
preco9x=(precoav*j9x)/9;
printf("\n\n\nAvista = %.2f", precoav);
printf("\n3 vezes = %.2f", preco3x);
printf("\n6 vezes = %.2f", preco6x);
printf("\n9 vezes = %.2f", preco9x);
printf("\n\n\nPrecione qualquer tecla para voltar ao menu principal...&quot;
getch();

case 2:
system("cls&quot;
printf("<<== Tabela Juros ==>>\n&quot;
printf("\nGanho Total %.2f", ganho);
printf("\nJuros 1x %.2f", j1x);
printf("\nJuros 3x %.2f", j3x);
printf("\nJuros 6x %.2f", j6x);
printf("\nJuros 9x %.2f", j9x);
printf("\n\n\nPrecione qualquer tecla para voltar ao menu principal...&quot;
getch();

case 3:
system("cls&quot;
printf("<<== Alterar Dados ==>>\n&quot;
printf("\n ---ATENCAO---\n&quot;
printf("A tabela de juros ja sao pre-definidas pelo programa\nqualquer alteracao nao sera salva!&quot;
printf("\n\nDeseja alterar os dados?(s/n): &quot;
scanf("%s",&op2);
if(op2=='n') {
printf("\n\n\nPrecione qualquer tecla para voltar ao menu principal...&quot;
}else{
printf("<<== Tabela Juros ==>>\n&quot;
printf("\n1. Ganho Total %.2f", ganho);
printf("\n2. Juros 1x %.2f", j1x);
printf("\n3. Juros 3x %.2f", j3x);
printf("\n4. Juros 6x %.2f", j6x);
printf("\n5. Juros 9x %.2f\n\n", j9x);
while(escolha2=='s') {
printf("Escolha o dado a alterar: &quot;
scanf("%i",&op3);
switch(op3) {
case 1:
printf("Entre o novo valor para Ganho Total: &quot;
scanf("%f",&ganho);
case 2:
printf("Entre o novo valor para Juros 1x: &quot;
scanf("%f",&j1x);
case 3:
printf("Entre o novo valor para Juros 3x: &quot;
scanf("%f",&j3x);
case 4:
printf("Entre o novo valor para Juros 6x: &quot;
scanf("%f",&j6x);
case 5:
printf("Entre o novo valor para Juros 9x: &quot;
scanf("%f",&j9x);
}
printf("Deseja alterar outro dado?(s/n): &quot;
scanf("%s",&escolha2);
}
}

case 4:
{
printf("\nDeseja Realmente sair?(s/n): &quot;
scanf("%s",&escolha);
}
default:
{
printf("Opcao Inexistente!&quot;
getch();
}
}
}
}
INTEL_KILLER
INTEL_KILLER Zerinho Registrado
1.2K Mensagens 4 Curtidas
#3 Por INTEL_KILLER
03/04/2009 - 16:27
Lol, que coisa mais besta q eu esqueci :P

Agora to com problema no case 3:


case 3:
system("cls&quot;
printf("<<== Alterar Dados ==>>\n&quot;
printf("\n ---ATENCAO---\n&quot;
printf("A tabela de juros ja eh pre-definidas pelo programa\nqualquer alteracao nao sera salva!&quot;
printf("\n\nDeseja alterar os dados?(s/n): &quot;
scanf("%s",&op2);
if(op2=='n') {
printf("\n\n\nPrecione qualquer tecla para voltar ao menu principal...&quot;
getch();
}else{
system("cls&quot;
printf("<<== Tabela Juros ==>>\n&quot;
printf("\n1. Ganho Total %.2f", ganho);
printf("\n2. Juros 1x %.2f", j1x);
printf("\n3. Juros 3x %.2f", j3x);
printf("\n4. Juros 6x %.2f", j6x);
printf("\n5. Juros 9x %.2f\n\n", j9x);
while(escolha2=='s') {
printf("Escolha o dado a alterar: &quot;
scanf("%i",&op3);
switch(op3) {
case 1:
printf("Entre o novo valor para Ganho Total: &quot;
scanf("%f",&ganho);
break;
case 2:
printf("Entre o novo valor para Juros 1x: &quot;
scanf("%f",&j1x);
break;
case 3:
printf("Entre o novo valor para Juros 3x: &quot;
scanf("%f",&j3x);
break;
case 4:
printf("Entre o novo valor para Juros 6x: &quot;
scanf("%f",&j6x);
break;
case 5:
printf("Entre o novo valor para Juros 9x: &quot;
scanf("%f",&j9x);
break;
}
printf("Deseja alterar outro dado?(s/n): &quot;
scanf("%s",&escolha2);
}
}
break;
INTEL_KILLER
INTEL_KILLER Zerinho Registrado
1.2K Mensagens 4 Curtidas
#5 Por INTEL_KILLER
03/04/2009 - 16:52
O problema é que quando eu seleciono a opção 3 ele aparece a pra escolher se quer mesmo editar a tabela e se eu der 's' ou 'n' ele volta pro menu principal, tentie colocar varios getch(); pra ir testando aonde ta o problema mais ele nem chega entra no while

Edit: Axo q o problema ta dentro do while, pq eu colquei 1 getch(); na linha anterior ao while e até ali chegou normal
fbac
fbac Novo Membro Registrado
20 Mensagens 0 Curtidas
#6 Por fbac
03/04/2009 - 16:58
INTEL_KILLER disse:
O problema é que quando eu seleciono a opção 3 ele aparece a pra escolher se quer mesmo editar a tabela e se eu der 's' ou 'n' ele volta pro menu principal, tentie colocar varios getch(); pra ir testando aonde ta o problema mais ele nem chega entra no while

Edit: Axo q o problema ta dentro do while, pq eu colquei 1 getch(); na linha anterior ao while e até ali chegou normal


Já tentou colocar um printf e ver o valor da variável op2? qual o resultado?
=============================
Fabio Bacellar
Atlon XP 1600+ 512 DDR 160Gb Seagate IDE GE Force 5200 256Mb
É velho mas tá pago
=============================
INTEL_KILLER
INTEL_KILLER Zerinho Registrado
1.2K Mensagens 4 Curtidas
#7 Por INTEL_KILLER
03/04/2009 - 17:04
fbac disse:
Já tentou colocar um printf e ver o valor da variável op2? qual o resultado?

coloquei um

printf("\n\nDeseja alterar os dados?(s/n): &quot;
scanf("%s",&op2);
printf("%s", op2);
getch();
Quando chega nessa parte da aquele erro de enviar ou não enviar relatório de erros O.o

Edit: Arrumei, e o op2 é s ou n conforme o digitado, não há problemas com essa variavel


Edit 2: Axei o problema, dei um printf no escolha2 que é a variavel que faiz entrar no while e ela não tem nenhum valor. O.o


char escolha2;
escolha2='s';


Mesmo estando sendo declarada corretamente ela não tem nenhum valor.
fbac
fbac Novo Membro Registrado
20 Mensagens 0 Curtidas
#8 Por fbac
03/04/2009 - 17:08
Entendo que esse erro é um erro geral do compilador, quando voce esta em modo de debug, correto?

Se for, não tem nada a ver com o programa em C, deve ser uma incompatibilidade qualquer na sua maquina.

Faz o seguinte: coloca um exit pra terminar o programa depois do printf, compila e executa pra vermos o resultado.
=============================
Fabio Bacellar
Atlon XP 1600+ 512 DDR 160Gb Seagate IDE GE Force 5200 256Mb
É velho mas tá pago
=============================
INTEL_KILLER
INTEL_KILLER Zerinho Registrado
1.2K Mensagens 4 Curtidas
#9 Por INTEL_KILLER
03/04/2009 - 17:10
fbac disse:
Entendo que esse erro é um erro geral do compilador, quando voce esta em modo de debug, correto?

Se for, não tem nada a ver com o programa em C, deve ser uma incompatibilidade qualquer na sua maquina.

Faz o seguinte: coloca um exit pra terminar o programa depois do printf, compila e executa pra vermos o resultado.


Releia o meu post anterior, eu editei.
INTEL_KILLER
INTEL_KILLER Zerinho Registrado
1.2K Mensagens 4 Curtidas
#11 Por INTEL_KILLER
03/04/2009 - 17:15
mcv disse:
Um problema pode estar aqui:
escolha2 é um char, mas você está usando %s, isso sobrescreve variável seguinte por causa do zero final.

Por que não coloca todo o código atual?


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

main () {

float precog, precoav, preco3x, preco6x, preco9x;
float ganho, j1x, j3x, j6x, j9x;
ganho=1.10; j1x=1.00; j3x=1.06; j6x=1.12; j9x=1.18;
int op, op3;
char escolha, escolha2, op2;
escolha='n';
escolha2='s';

while(escolha=='n') {
system("cls&quot;
printf("<<== Programa Orcamento ==>>\n&quot;
printf("\n1. Orcamento.\n2. Tabelas.\n3. Alterar Dados.\n4. Sair\n\nEscolha uma opcao: &quot;
scanf("%i",&op);
switch(op)
{
case 1:
system("cls&quot;
printf("<<== Orcamento ==>>\n&quot;
printf("\nInsira o valor: R$ &quot;
scanf("%f",&precog);
precoav=precog*ganho;
preco3x=(precoav*j3x)/3;
preco6x=(precoav*j6x)/6;
preco9x=(precoav*j9x)/9;
printf("\n\n\nAvista = R$ %.2f", precoav);
printf("\n3 vezes = R$ %.2f", preco3x);
printf("\n6 vezes = R$ %.2f", preco6x);
printf("\n9 vezes = R$ %.2f", preco9x);
printf("\n\n\nPrecione qualquer tecla para voltar ao menu principal...&quot;
getch();
break;
case 2:
system("cls&quot;
printf("<<== Tabela Juros ==>>\n&quot;
printf("\nGanho Total %.2f", ganho);
printf("\nJuros 1x %.2f", j1x);
printf("\nJuros 3x %.2f", j3x);
printf("\nJuros 6x %.2f", j6x);
printf("\nJuros 9x %.2f", j9x);
printf("\n\n\nPrecione qualquer tecla para voltar ao menu principal...&quot;
getch();
break;
case 3:
system("cls&quot;
printf("<<== Alterar Dados ==>>\n&quot;
printf("\n ---ATENCAO---\n&quot;
printf("A tabela de juros ja eh pre-definidas pelo programa\nqualquer alteracao nao sera salva!&quot;
printf("\n\nDeseja alterar os dados?(s/n): &quot;
scanf("%s",&op2);
if(op2=='n') {
printf("\n\n\nPrecione qualquer tecla para voltar ao menu principal...&quot;
getch();
break;
}else{
system("cls&quot;
printf("<<== Tabela Juros ==>>\n&quot;
printf("\n1. Ganho Total %.2f", ganho);
printf("\n2. Juros 1x %.2f", j1x);
printf("\n3. Juros 3x %.2f", j3x);
printf("\n4. Juros 6x %.2f", j6x);
printf("\n5. Juros 9x %.2f\n\n", j9x);
while(escolha2=='s') {
printf("\n\nEscolha o dado a alterar: &quot;
scanf("%i",&op3);
switch(op3) {
case 1:
printf("Entre o novo valor para Ganho Total: &quot;
scanf("%f",&ganho);
break;
case 2:
printf("Entre o novo valor para Juros 1x: &quot;
scanf("%f",&j1x);
break;
case 3:
printf("Entre o novo valor para Juros 3x: &quot;
scanf("%f",&j3x);
break;
case 4:
printf("Entre o novo valor para Juros 6x: &quot;
scanf("%f",&j6x);
break;
case 5:
printf("Entre o novo valor para Juros 9x: &quot;
scanf("%f",&j9x);
break;
}
printf("Deseja alterar outro dado?(s/n): &quot;
scanf("%s",&escolha2);
}
}
break;
case 4:

printf("\nDeseja Realmente sair?(s/n): &quot;
scanf("%s",&escolha);
break;
default:

printf("Opcao Inexistente!&quot;
getch();
break;
}
}
}
O código ta ai, mais pq ele daria problema sendo que o scanf da escolha2 tá só no final do while? não há alteração na variavel escolha2 antes de entrar no while....
E tambem se fosse problema de estar usando %s no scanf intaum n funcionaria o case4 tambem.
mcv
mcv Veterano Registrado
1.2K Mensagens 40 Curtidas
#15 Por mcv
03/04/2009 - 17:33
#include <stdio.h>
// #include <conio.h>
#include <stdlib.h>
#include <string.h>

main () {

float precog, precoav, preco3x, preco6x, preco9x;
float ganho, j1x, j3x, j6x, j9x;
ganho=1.10; j1x=1.00; j3x=1.06; j6x=1.12; j9x=1.18;
int op, op3;
char escolha, escolha2, op2;
escolha='n';
escolha2='s';

while(escolha=='n') {
system("cls&quot;
printf("<<== Programa Orcamento ==>>\n&quot;
printf("\n1. Orcamento.\n2. Tabelas.\n3. Alterar Dados.\n4. Sair\n\nEscolha uma opcao: &quot;
scanf("%i",&op);
switch(op)
{
case 1:
system("cls&quot;
printf("<<== Orcamento ==>>\n&quot;
printf("\nInsira o valor: R$ &quot;
scanf("%f",&precog);
precoav=precog*ganho;
preco3x=(precoav*j3x)/3;
preco6x=(precoav*j6x)/6;
preco9x=(precoav*j9x)/9;
printf("\n\n\nAvista = R$ %.2f", precoav);
printf("\n3 vezes = R$ %.2f", preco3x);
printf("\n6 vezes = R$ %.2f", preco6x);
printf("\n9 vezes = R$ %.2f", preco9x);
printf("\n\n\nPrecione qualquer tecla para voltar ao menu principal...&quot;
getchar();
break;
case 2:
system("cls&quot;
printf("<<== Tabela Juros ==>>\n&quot;
printf("\nGanho Total %.2f", ganho);
printf("\nJuros 1x %.2f", j1x);
printf("\nJuros 3x %.2f", j3x);
printf("\nJuros 6x %.2f", j6x);
printf("\nJuros 9x %.2f", j9x);
printf("\n\n\nPrecione qualquer tecla para voltar ao menu principal...&quot;
getchar();
break;
case 3:
system("cls&quot;
printf("<<== Alterar Dados ==>>\n&quot;
printf("\n ---ATENCAO---\n&quot;
printf("A tabela de juros ja eh pre-definidas pelo programa\nqualquer alteracao nao sera salva!&quot;
printf("\n\nDeseja alterar os dados?(s/n): &quot;
scanf(" %c",&op2);
if(op2=='n') {
printf("\n\n\nPrecione qualquer tecla para voltar ao menu principal...&quot;
getchar();
break;
}else{
system("cls&quot;
printf("<<== Tabela Juros ==>>\n&quot;
printf("\n1. Ganho Total %.2f", ganho);
printf("\n2. Juros 1x %.2f", j1x);
printf("\n3. Juros 3x %.2f", j3x);
printf("\n4. Juros 6x %.2f", j6x);
printf("\n5. Juros 9x %.2f\n\n", j9x);
while(escolha2=='s') {
printf("\n\nEscolha o dado a alterar: &quot;
scanf("%i",&op3);
switch(op3) {
case 1:
printf("Entre o novo valor para Ganho Total: &quot;
scanf("%f",&ganho);
break;
case 2:
printf("Entre o novo valor para Juros 1x: &quot;
scanf("%f",&j1x);
break;
case 3:
printf("Entre o novo valor para Juros 3x: &quot;
scanf("%f",&j3x);
break;
case 4:
printf("Entre o novo valor para Juros 6x: &quot;
scanf("%f",&j6x);
break;
case 5:
printf("Entre o novo valor para Juros 9x: &quot;
scanf("%f",&j9x);
break;
}
printf("Deseja alterar outro dado?(s/n): &quot;
scanf(" %c",&escolha2);
}
}
break;
case 4:

printf("\nDeseja Realmente sair?(s/n): &quot;
scanf(" %c",&escolha);
break;
default:

printf("Opcao Inexistente!&quot;
getchar();
break;
}
}
}
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal