Ir ao conteúdo
  • Cadastre-se

Me ajudem a descobrir o erro em C


MassakiMsk

Posts recomendados

#include<stdio.h>int main(){    int op;    double vi, pc, vf;    char jd;    char dg = '%';    printf("Digite:\n1 para descobrir o valor inicial\n2 para descobrir a porcentagem de juros ou desconto\n3 para descobrir o valor total\n");    scanf("%d", &op);    if (op==1){    printf("digite + para juros ou - para descontos\n");    scanf("%c", &jd);    switch (jd){        case '+':        printf("entre com o juros\n");        scanf("%lf", &pc);        printf("entre com o valor final\n");        scanf("%lf", &vf);        vi=vf*100/(100+pc);        printf("\n\n\n");        printf("Valor inicial = R$ %.2lf\n", vi);        printf("Juros de %.2lf%c\n", pc, dg);        printf("Valor final = R$ %.2lf\n", vf);        printf("\n\n\n");        break;        case '-':        printf("entre com o desconto\n");        scanf("%lf", &pc);        printf("entre com o valor final\n");        scanf("%lf", &vf);        vi=vf*100/(100-pc);        printf("\n\n\n");        printf("Valor inicial = R$ %.2lf\n", vi);        printf("Desconto de %.2lf%c\n", pc, dg);        printf("Valor final = R$ %.2lf\n", vf);        printf("\n\n\n");        break;        }    }    else if (op==2) {        printf("ainda nao esta pronto");    }    else if (op==3) {        printf("ainda nao esta pronto");    }    else {        printf("digite um numero valido");    }    return 0;}

primeiro eu tentei nesse metodo de cima usando o if else, depois tentei o metodo de baixo usando switch para escolher as opções.

#include<stdio.h>int main(){    int op; // opção    double vi, pc, vf; // valor inicial, porcentagem, valor final    char jd; // juros ou desconto    char dg = '%'; // nao sei imprimeir %, então usei uma variavel para isso    printf("Digite:\n1 para descobrir o valor inicial\n2 para descobrir a porcentagem de juros ou desconto\n3 para descobrir o valor total\n");    scanf("%d", &op);    switch (op){        case 1:        printf("digite + para juros ou - para descontos\n");        scanf("%c", &jd);        switch (jd){            case '+':            printf("entre com o juros\n");            scanf("%lf", &pc);            printf("entre com o valor final\n");            scanf("%lf", &vf);            vi=vf*100/(100+pc);            printf("\n\n\n");            printf("Valor inicial = R$ %.2lf\n", vi);            printf("Juros de %.2lf%c\n", pc, dg);            printf("Valor final = R$ %.2lf\n", vf);            printf("\n\n\n");                break;            case '-':            printf("entre com o desconto\n");            scanf("%lf", &pc);            printf("entre com o valor final\n");            scanf("%lf", &vf);            vi=vf*100/(100-pc);            printf("\n\n\n");            printf("Valor inicial = R$ %.2lf\n", vi);            printf("Desconto de %.2lf%c\n", pc, dg);            printf("Valor final = R$ %.2lf\n", vf);            printf("\n\n\n");                break;            }            case 2:                printf("em desenvolvimento");                break;            case 3:                printf("desenvolvendo");                break;            default:                printf("Digite um numero valido");                break;        }    return 0;}

quando eu digito a opção 1 ele simplesmente imprime:

digite + para juros ou - para descontosem desenvolvimento 

e finaliza o codigo.

 

Sou iniciante em programação, por isso nao consegui resolver o erro sozinho.

Link para o comentário
Compartilhar em outros sites

^-^

 

1º erro:
Quando você escreveu a parte do  

 

switch (op){

        case 1:
 
você esqueceu de colocar o break; dele la em baixo logo acima do "case 2"
 
isso fez com que o programa pulasse para o "em desenvolvimento"


2º erro

na hora do "scanf("%c", &jd);" use %s ao invés de %c. no momento não sei explicar o porque mas com o %c estava dando problema.
 
qualquer duvida me pergunte!

(5 min de forum e ja ajudei uma pessoa o/)
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Obrigado, funcionou o %s, mas nao entendi porque.
e o break eu realmente tinha esquecido, mas mexer com muitas linhas me deixou confuso rsrs

 

No fim o codigo ficou assim:

#include<stdio.h>int main(){    int op; // opção    double vi, pc, vf; // valor inicial, porcentagem, valor final    char jd; // juros ou desconto    char dg = '%'; // nao sei imprimeir %, entao usei uma variavel para isso    printf("Digite:\n1 para descobrir o valor inicial\n2 para descobrir a porcentagem de juros ou desconto\n3 para descobrir o valor total\n");    scanf("%d", &op);    switch (op){        case 1:        printf("digite + para juros ou - para descontos\n");        scanf("%s", &jd);        switch (jd){            case '+':            printf("entre com o juros\n");            scanf("%lf", &pc);            printf("entre com o valor final\n");            scanf("%lf", &vf);            vi=vf*100/(100+pc);            printf("\n\n\n");            printf("Valor inicial = R$ %.2lf\n", vi);            printf("Juros de %.2lf%c\n", pc, dg);            printf("Valor final = R$ %.2lf\n", vf);            printf("\n\n\n");                break;            case '-':            printf("entre com o desconto\n");            scanf("%lf", &pc);            printf("entre com o valor final\n");            scanf("%lf", &vf);            vi=vf*100/(100-pc);            printf("\n\n\n");            printf("Valor inicial = R$ %.2lf\n", vi);            printf("Desconto de %.2lf%c\n", pc, dg);            printf("Valor final = R$ %.2lf\n", vf);            printf("\n\n\n");                break;            }            break;        case 2:        printf("Entre com o valor inicial\n");        scanf("%lf", &vi);        printf("Entre com o valor final\n");        scanf("%lf", &vf);        pc=100*(vf-vi)/vi;        if (pc>0){            printf("Valor inicial = R$ %.2lf\n", vi);            printf("Juros de %.2lf%c\n", pc, dg);            printf("Valor final = R$ %.2lf\n", vf);           }        else if (pc<0){            pc=pc*(-1);            printf("Valor inicial = R$ %.2lf\n", vi);            printf("Desconto de %.2lf%c\n", pc, dg);            printf("Valor final = R$ %.2lf\n", vf);        }        else{            printf("Valor inicial = R$ %.2lf\n", vi);            printf("Juros ou desconto nulo");            printf("Valor final = R$ %.2lf\n", vf);        }            break;        case 3:        printf("Digite + para juros ou - para desconto");        scanf("%s", &jd);        switch (jd){            case '+':            printf("Entre com o valor inicial\n");            scanf("%lf", &vi);            printf("Entre com o juros\n");            scanf("%lf", &pc);            vf=vi*(100+pc)/100;            printf("Valor inicial = R$ %.2lf\n", vi);            printf("Juros de %.2lf%c\n", pc, dg);            printf("Valor final = R$%.2lf\n", vf);                break;            case '-':            printf("Entre com o valor inicial\n");            scanf("%lf", &vi);            printf("Entre com o desconto\n");            scanf("%lf", &pc);            vf=vi*(100-pc)/100;            printf("Valor inicial = R$ %.2lf\n", vi);            printf("Desconto de %.2lf%c\n", pc, dg);            printf("Valor final = R$%.2lf\n", vf);                break;            }            break;        default:            printf("Digite um numero valido");            break;    }    return 0;}

Só faltou ajeitar alguns espaços entre as entradas e as saidas, mas funcionou.
Obrigado.

Link para o comentário
Compartilhar em outros sites

cara, pode parecer mais complicado mas utilizar o cout e o cin vai tornar sua programação mais e mais limpa.

mas se você for como eu e ainda está aprendendo faz o seguinte;

ao invés de você utilizar a entrada para %s (que lê uma string, frase "isto é uma string") seria melhor utilizar a entrada para %d (que lê um valor inteiro 1, 2, 3, 4, 5, 6, 7, 8, 9, 0) ou para %f (que lê um valor flutuante (float) real 1.5, 2.37, 10.356789) atribuindo de forma mais limpa ao programa determinado valor.

mas é mais fácil utilizar cout e cin pois sao mais inteligentes:

printf("digite um valor; ");

scanf("%d", &variavel);

printf("\n\ndigite outro valor: ");

scanf("%d", &variavel2);

printf("\n\no resultado de %d multiplicado por %d é %d",variavel, variavel2, variavel2*variavel);

sysrem("pause");// exibe o resultado antes de fechar a função ou o proprio programa em si e serve somente em wndows ja q é comando do sistema operacional

e imprime...

ja com o cout e o cin

cout<<"digite um valor: ";

cin>>variavel;

cout<<"\n\ndigite outro valor: ";

cin>>variavel2;

cout<<\n\n"o resultado de"<<variavel<<" multiplicada por "<<variavel2<<" é "<<variavel*variavel2;

system("pause");

e imprime...

cout é inteligente porque consegue transformar o int em float...ou seja o tipo de dado a ser impresso

exemplo

eu quero achar quanto vale 1% de 10 (que é 0.1) e quero receber o valor real

cout<<(float)1*10/100<<" é"<<variavel<<"% de "<<variaveltotal;

e imprime 0.1 é 1% de 10

note q eu n especifiquei o %% que imprime o sinal de porcentagem isso porque, como eu disse, cout é inteligente

então o que tudo isso signica? o tamanho dos dados e o tamanho do seu programa.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

porque não usa While infinito ex:

 

Seu código em C++ com while

#include <iostream>#include <stdlib.h>using namespace std;int main(void){		int op;	float vi, pc, vf;	char jd, dg = '%';		while(1){		cout<< "Digite:\n1 para descobrir o valor inicial\n2 para descobrir a porcentagem de juros ou desconto\n3 para descobrir o valor total\n"<<endl;		cin >> op;		switch (op){        case 1:        cout<<"digite + para juros ou - para descontos\n"<<endl;        cin>>jd;        switch (jd){            case '+':            cout<<"entre com o juros\n"<<endl;            cin>>pc;            cout<<"entre com o valor final\n"<<endl;            cin>>vf;            vi = vf * 100 /( 100 + pc);            cout<<"\n\n\n"<<endl;            cout<<"Valor inicial = R$ "<< vi<<"\n"<<endl;            cout<<"Juros de "<< pc<< dg<<"\n"<<endl;            cout<<"Valor final = R$ "<< vf<<"\n"<<endl;                break;            case '-':            cout<<"\n\n\nentre com o desconto\n"<<endl;            cin>>pc;            cout<<"entre com o valor final\n"<<endl;            cin>>vf;            vi= vf * 100 /( 100 - pc);            cout<<"\n\nValor inicial = R$ "<< vi<<"\n"<<endl;            cout<<"Desconto de " << pc << dg<<"\n" << endl;            cout<<"Valor final = R$ "<< vf<<"\n" << endl;                break;            }		}            break;        case 2:        cout<<"Entre com o valor inicial\n"<<endl;        cin>>vi;        cout<<"Entre com o valor final\n"<<endl;        cin>>vf;        pc=100*(vf-vi)/vi;        if (pc>0){            cout<<"Valor inicial = R$ "<< vi<<"\n"<<endl;            cout<<"Juros de "<< pc<< dg<<"\n"<<endl;            cout<<"Valor final = R$ "<< vf<<"\n"<<endl;           }        else if (pc<0){            pc=pc*(-1);            cout<<"Valor inicial = R$ "<< vi<<"\n"<<endl;            cout<<"Desconto de "<< pc<< dg<<"\n"<<endl;            cout<<"Valor final = R$ "<< vf<<"\n"<<endl;        }        else{            cout<<"Valor inicial = R$ "<< vi<<"\n"<<endl;            cout<<"Juros ou desconto nulo"<<endl;            cout<<"Valor final = R$ "<< vf<<"\n"<<endl;        }            break;        case 3:        cout<<"Digite + para juros ou - para desconto"<<endl;        cin>>jd;        switch (jd){            case '+':            cout<<"Entre com o valor inicial\n"<<endl;            cin>>vi;            cout<<"Entre com o juros\n"<<endl;            cin>>pc;            vf=vi*(100+pc)/100;            cout<<"Valor inicial = R$ "<< vi<<"\n"<<endl;            cout<<"Juros de "<< pc << dg <<"\n"<<endl;            cout<<"Valor final = R$ "<< vf <<"\n"<<endl;                break;            case '-':            cout<<"Entre com o valor inicial\n"<<endl;            cin>>vi;            cout<<"Entre com o desconto\n"<<endl;            cin>>pc;            vf=vi*(100-pc)/100;            cout<<"Valor inicial = R$ "<< vi <<"\n"<<endl;            cout<<"Desconto de "<< pc << dg <<"\n"<<endl;            cout<<"Valor final = R$ "<< vf <<"\n"<<endl;                break;            }            break;        default:            cout<<"Digite um numero valido"<<endl;            break;    }	return 0;}
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Você precisa especificar o tipo que você desejar "printar" na tela, pois para o C não é apenas jogar um texto lá.

A variável que vai ser escrita %s é um ponteiro ou seja uma "cadeia" de espaços em memória que guardam bytes, por isso que você precisa especificar se é string ou byte.

 

C, por ser uma linguagem fortemente TIPADA, exige que você faça da maneira mais "correta".

 

Byte = 1 espaço na memória

String = Vários espaços (assim ele entende que precisa pegar todos os espaços do ponteiro.)

 

Não expliquei bem, mas qualquer dúvida é só perguntar que explico novamente.

 

Abraço!

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...