Duvida sobre loop no C

1. Duvida sobre loop no C

Rafael Manarin
LordMAnarin

(usa Ubuntu)

Enviado em 11/07/2013 - 17:13h

Ola, sou iniciante na programação, comecei a aprender sozinho, e estou com um "problema".
Criei um joguinho simples de adivinhe o numero como auto-avaliação. O tal jogo, funciona bem, porem, quando eu entro com o numero e dou enter, e acaba os códigos, o jogo fecha, dei uma lida sobre o comando "for", mas não consegui aplicar no meu jogo

Ta ai o código do jogo (bem simples e tosco...), tentei colocar o for, mas ele deixava apenas um "if" em loop, não todo o programa
Obs: o jogo abre via terminal

#include <stdio.h>

int main ()
{
int num;
printf ("Digite um numero entre 0 à 30 e tente acertar o numero correto: ");
scanf ("%d", &num);
if (num > 20 ) printf ("\n\nErrado!, o numero correto é menor, tente novamente");
if (num == 20) printf ("\n\nDica, x² = 255 ");
if (num == 19) printf ("\n\nDica, x*5 = 75" );
if (num == 18) printf ("\n\nDica, x*x*x = 3375 ");
if (num == 17) printf ("\n\nDica, sua divisão resulta em numero com virgula");
if (num == 16) printf ("\n\nUi, quase, chegou perto, tente novamente");
if (num == 15)
{
printf ("\n\nParabens!, voce acertou, o numero correto é 15");
}
if (num == 14) printf ("\n\nUi, quase, chegou perto, tente novamente");
if (num < 14 ) printf ("\n\nErrado!, o numero correto é maior. tente novamente");

return (0);
}


  


2. Re: Duvida sobre loop no C

Paulo
paulo1205

(usa Ubuntu)

Enviado em 11/07/2013 - 18:10h

Seu problema provavelmente é o clássico "lixo no buffer de entrada". Em particular, após ler o número, o caráter '\n', correspondente ao <ENTER>, não é removido do buffer, e, se você não tomar o devido cuidado e a operação de leitura seguinde ler um caráter isolado (por exemplo, via getchar() ou a conversão %c de scanf()) ou uma linha de texto, esse '\n' vai ser jogado nessa leitura.

Já houve dezenas de tópicos a esse respeito neste fórum e em outros. Faça uma pesquisa. Ou, então, poste o seu código completo, para que possamos ajudar a pontar o local específico do erro.


3. Re: Duvida sobre loop no C

Daniel
danielcrvg

(usa Slackware)

Enviado em 11/07/2013 - 18:16h

usa o while () {}


e dentro do while vai usando os if () {}





4. Re: Duvida sobre loop no C

Rafael Manarin
LordMAnarin

(usa Ubuntu)

Enviado em 11/07/2013 - 18:24h

paulo1205 escreveu:

Seu problema provavelmente é o clássico "lixo no buffer de entrada". Em particular, após ler o número, o caráter '\n', correspondente ao <ENTER>, não é removido do buffer, e, se você não tomar o devido cuidado e a operação de leitura seguinde ler um caráter isolado (por exemplo, via getchar() ou a conversão %c de scanf()) ou uma linha de texto, esse '\n' vai ser jogado nessa leitura.

Já houve dezenas de tópicos a esse respeito neste fórum e em outros. Faça uma pesquisa. Ou, então, poste o seu código completo, para que possamos ajudar a pontar o local específico do erro.


Esse é o código completo, e eu li alguns tópicos, mas todos apenas perguntavam como deixar um unico comando em loop.
Ainda to bem no começo do curso, eu basicamente peguei varios exemplos do professor (apostila) editar e juntar tudo, só criei isso só pra praticar...

vou dar uma lida em outras apostilas, mas mesmo assim, obrigado


5. Re: Duvida sobre loop no C

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 11/07/2013 - 18:31h

Antes de treinar programação leia algo sobre lógica de programação. Não adianta colocar os carros na frente dos bois. Se tivesse estudado lógica, saberia resolver esse problema bem facilmente, em qualquer linguagem.


6. Re: Duvida sobre loop no C

Paulo
paulo1205

(usa Ubuntu)

Enviado em 11/07/2013 - 19:08h

OK. Eu que não havia compreendido anteriormente, pois eu achei que você já tinha tentado envolver o programa mostrado com um loop, e não tinha conseguido o efeito desejado, mas na verdade você nem sequer chegou a fazê-lo.

Mesmo assim, o que eu disse sobre lixo no buffer de entrada continua valendo, caso você opte por perguntar ao usuário se ele quer repetir a execução.

Consdere, no entanto o seu programa. Se o número digitado for 20, você não deveria ter de testar vários outros valores, depois, de novo. Você pode alterar sua sequência de testes para a forma if/else if/else if/.../else, de modo que a primeira condição percebida como verdadeira vai poupar o trabalho de testar as demais condções.

Em tempo: 15*15=225, não 255.


7. Re: Duvida sobre loop no C

ian cléver sales fernandes
ianclever

(usa Arch Linux)

Enviado em 11/07/2013 - 19:54h

não precisa for nesse tipo de programa, for é para programas com ponto definido de iníco e parada(vc sabe quantas vezes quer repetir), o while verifica primeiro e depois entra no loop, se sua leitura estiver dentro do while vai dar erro, vc precisa primeiro igualar o número a algo antes e depois ler.

Nesse caso o mais recomendado é o do{}while(), pq entra primeiro no loop e depois verifica.

ex.:



#include <stdio.h>

void main()
{
int num;
do
{
printf("Digite um numero ...");
scanf("%d",&num);
if(...)
...
if(...)
}while(num==15);
}







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts