Ir ao conteúdo
  • Cadastre-se

Repetição sem motivo aparente


Posts recomendados

Alguem poderia me explicar,porque quando vou rodar meu programa  essa parte que eu destaquei  "deseja calcular outro custo ?" aparece duas vezes? porém o programa funciona normalmente

printf("qual a area contruida?\n");
    scanf("%f",&x);
    printf("quantos andares tem?\n");
    scanf("%i",&andar);
    areatotal1= x*andar;
    custototal1=areatotal1*precomq1;
    custototal3=custototal1;
    printf("area total do contruida e: %f \n o custo total da obra e : %f \n ",areatotal1,custototal1);
// O ERRO ESTA ACONTECENDO AQUI
    for(i=0;i<10;i++){
    printf("deseja calcular outro custo? \n");
    scanf("%c", & duvida);
    if (duvida=='n')
    return 0 ;
    if(duvida=='s'){
    printf("\n qual a area construida? \n");
    scanf("%f",&y);
    printf("\n quantos andares possui? \n");
    scanf("%i",&andar2);
    areatotal2=y * andar2;
    printf("sua obra e no sobresolo ou subsolo? \n digite 0 para sobresolo e 1 para subsolo \n");
    scanf("%i",&ss);
    if (ss==1)
    custototal2=areatotal2 * precomq1;
    if (ss==0)
        custototal2=areatotal2*precomq2;

        custototal3=custototal3 +custototal2;
printf("a area total foi %f : \n  o custo total da obra : %f ",areatotal2,custototal2);

    }
}

return 0;
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

É um problema na entrada de dados...

 

A solução mais simples é mudar:

scanf("%i",&andar);

Para:

scanf("%i%*c",&andar);

Basicamente isso acontece por que sem o %*c nesse scanf() para descartar o caractere nova linha '\n' (que é gerado quando você aperta Enter após digitar o número de andares), esse caractere nova linha fica sobrando no buffer de entrada (stdin).

 

E por sua vez o próximo scanf() no seu programa está esperando capturar um caractere (pois usa "%c"), então no primeiro loop do ciclo for o primeiro caractere capturado é o caractere '\n' que ficou sobrando no buffer por causa do scanf() anterior.

 

Não tem nenhum if dentro do ciclo pra tratar a situação em que duvida tem o caractere nova linha '\n' como valor, então apenas ele passa para o próximo loop do ciclo for sem executar mais nada, e roda o printf() e scanf() novamente.

 

 

Aproveite e mude esse também:

scanf("%c%*c", &duvida);

Pois sem isso vai gerar a mesma situação, do caso do scanf() anterior, toda vez que alguém digitar uma letra e der Enter.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Mas fflush(stdin) depende de implementação da função na biblioteca do seu compilador, pois essa função é para buffers/streams de saída, não de entrada, e ela tem comportamento indefinido para streams de entrada, logo pode funcionar como você espera num compilador mas não em outro quando usado com stdin, por isso não deve ser usada dessa maneira.

 

Se deseja limpar o buffer de entrada o modo correto seria usar uma função como essa no programa:

void flushstdin(){
    int c;
    while ((c = getchar()) != '\n' && c != EOF);
}

E usá-la no lugar onde de onde você usaria fflush(stdin).

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Poxa vida,obrigado de verdade,tava aperriado tentando descobrir aonde ta o defeito,eu nunca iria descobrir isso, mas enfim,muito obrigado @isrnick  e@devair1010 ,agora podem me explicar,em uma linguagem pt-br qual foi o erro?desculpe minha leiguisse nesse assunto,mas nao entendi muito bem o que foi o erro.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@Rafael Filho     sinceramente eu não sei o motivo desse erro por que sou apenas iniciante em lógica de programação, mas já vi esse erro acontecer várias vezes e todas as vezes que acontecia eu colocava esse comando e resolvia,  eu uso o codeblocks, não sei qual compilador você usa, por que em outro compilador pode ser que não dê certo.

Link para o comentário
Compartilhar em outros sites

Nota: O CodeBlocks não é um compilador, é uma IDE, do inglês Integrated Development Environment ou Ambiente de Desenvolvimento Integrado.

 

Trata-se de um pacote que inclui ferramentas para facilitar a programação, incluindo um editor de texto como várias funcionalidades apropriadas para programar, entre outras ferramentas, e pode incluir ou não um compilador.

 

Você tem a opção de baixar o Codeblocks com um compilador incluído, o compilador se chama MinGW, e é uma versão para o Windows do GCC, ou GNU Compiler Collection, que foi feito para o Linux, e é uma coleção de compiladores para as linguagens C, C++, Objective-C, Fortran, Ada, e Go.

  • Curtir 1
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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!