Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
vermenoturno1

Problema com algoritmo, linguagem C

Recommended Posts

Bom dia a todos, amigos preciso de ajuda, sou novo na linguagem e o Prof passou uma questão, to fazendo esta rodando, quando coloco qualquer outra letra diferente de 't', entra num laço infinito, gostaria de ajuda pra ver no que estou errando.

Descubra a letra correta

#include <stdio.h>

int main(){

char ch;

int tentativas;

do{

printf("digite uma letra: ");

scanf("%c", &ch); getchar();

tentativas = 1;

while (ch = 't'){

printf("%c é incorreto \n", ch);

tentativas++;

printf("Tente Novamente \n");

}

printf("%c he correto", ch);

printf("Acertou em %d vezes", tentativas);

printf("continua ? (s/n): ");

scanf("%c", &ch); getchar();

}while (ch == 's');

}

grato pela atenção

Editado por vermenoturno1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro, este getchar(); não está fazendo nada no seu código.

Segundo, é claro que ele está em loop, olha o que você fez:

while (ch = 't'){

printf("%c é incorreto \n", ch);

tentativas++;

printf("Tente Novamente \n");

}

Já existe um erro no while, pois não é uma comparação, é uma atribuição. O que você quer testar é (ch != 't'), (ch = 't') atribui o char t à variável ch. Dentro deste while só tem printf e uma conta que não muda nunca o teste do while, sendo assim uma vez que entra é pra sempre. Dentro do while sempre deve existir alguma operação que de algum modo mude o teste do while. No caso está faltando um scanf para ler outra letra que o usuário digitar.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Sei amigo, entendo mais eu to querendo tipo, deixar ch com o valor de 't', pra quando a pessoa digitar outra letra aparecer a mensagem

    ("%c é incorreto \n", ch);

    ("Tente Novamente \n");

    ate a pessoa digitar a letra correta, ate a pessoa digitar a letra 't' que ai ele vai dar a resposta de que a letra é correta.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    pra quando a pessoa digitar outra letra

    E essa outra letra que a pessoa vai digitar você vai alocar aonde?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • E essa outra letra que a pessoa vai digitar você vai alocar aonde?

    eu nao vou usar a outra letra, so quero que caso a a pessoa digite como por exemplo, a letra "Q" apareça a mensagem "Q é incorreto" e volte novamente para fazer a operação ate que a pessoa acerte a letra. que no caso é "t"

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Olhe pra esta linha:

    scanf("%c", &ch);

    Aqui você pede um input do usuário, e grava na variável ch.

    Agora olhe esta linha:

    while (ch = 't'){

    Aqui você sobrescreve a variável ch, que continha a letra que o usuário digitou, com 't'. Você perdeu a letra que o usuário digitou. Seu programa se torna incapaz de fazer qualquer comparação pois perdeu o dado.

    ch = 't' significa: pegue a letra t e coloque na variável ch, jogando fora o que havia lá dentro antes.

    O que você quer fazer é:

    Compare ch com t. E isso você consegue usando o operador == ou !=.

    ch == 't' significa: ch é igual a t? Retorne verdadeiro se sim e falso se não.

    ch != 't' significa: ch é diferente de t? Retorne verdadeiro se sim e falso se não.

    Isso é um teste e tem a chance de dar falso, saindo do while. Como (ch = 't') não é teste, loop infinito. Então este é o primeiro erro. Deve corrigir para:

    while (ch != 't') pois você quer o loop até que esta condição seja falsa, ou seja, ch == 't'.

    Próximo erro:

    Sabendo deste primeiro erro, vamos para o próximo. Dentro do loop, você não tem nenhuma ação que faça mudar o teste do while. Logo, loop infinito de novo. Ex:

    while (a > B) {

    c = a+b;

    d = c * j;

    }

    Nenhuma dessas operações muda nem a nem b, logo você cai num loop infinito. Algo do tipo:

    while (a > B) {

    scanf("%d", &B);

    a = b+c;

    }

    Tem chance de estar no caminho certo, pois a ou b são diferentes em cada iteração.

    Sabendo que o teste é ch != 't', se você não renovar ch, o usuário nunca vai ter a chance de digitar uma nova letra, e o teste vai se repetir infinitamente com a mesma letra, o obviamente sempre dando o mesmo resultado.

    while (ch != 't'){

    printf("%c é incorreto \n", ch);

    tentativas++;

    printf("Tente Novamente \n");

    }

    Deve se tornar:

    while (ch != 't'){

    printf("%c é incorreto \n", ch);

    tentativas++;

    printf("Tente Novamente \n");

    scanf("%c", &ch);

    }

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Muito obrigado amigo, deu certo, o programa rodou uma beleza e valeu ate pontos, muito obrigado pela dica

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário

    Entre para seguir isso  





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×