Ir ao conteúdo
  • Cadastre-se

Problema com algoritmo, linguagem C


vermenoturno1

Posts recomendados

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

Link para o comentário
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.

Link para o comentário
Compartilhar em outros sites

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.

Link para o comentário
Compartilhar em outros sites

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"

Link para o comentário
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);

}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para 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...