Ir ao conteúdo
  • Cadastre-se

C Compilação C (do {if else} while)


pedrolsm

Posts recomendados

Boa noite,

 

Estou fazendo o curso do cc50 e logo no pset1 estou com uma duvida, nao estou conseguindo fazer funcionar esse programa.

Sempre que que roda ele retorna o else a partir da segunda tentativa, mas ele nao volta a testar i if.

 

#include <cc50.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int
main(void)
{
// seed do PRNG
    srand(time(NULL));
// escolhe número pseudo-aleatório entre [0, 1023]
    int skittles = rand() % 1024;
// TODO
      printf("Olá! Eu sou uma máquina de balas falante! Adivinhe quantos Skittles têm dentro de mim. Dica: Estou pensando em um número entre 0 e 1023. Qual é ele?\n");
    int n = GetInt();


    do
    
    {

         if (n > skittles)

             {
             printf("acima do valor, tente um valor menor\n");
             GetInt();
             }
             
         else (n < skittles);

             {
             printf("abaixo do valor, tente um valor maior\n");
             GetInt();
             }

     }

         while (n = skittles);

             printf("parabens\n");

}

Link para o comentário
Compartilhar em outros sites

trecho.png.2a08948cc82be13ebbbf2c15ad6b3c1f.png

Esses ';' provavelmente não são o que você queria.

 

Eles vão terminar o bloco de comandos. Em especial o segundo vai fazer com que o while() tenha um corpo vazio de instruções. Que pretende com essa condição (n<skittles) ? era pra ser um comentário, imagino

 

Há casos em que a própria condição dentro do while() é ativa e isso está certo, mas muitas vezes está, como aqui, errado.

 

Cuidado com a falta e o excesso de ';'. E cuidado com o uso de '=' ao invés de '==' como na condição do while(). Em geral está errado, como aqui está.

 

E se acostume a compilar com as opções corretas para o momento, porque seu compilador em geral te avisa dessas coisas, se usar no mínimo -Wall -std=c17 nas opções de compilação....

 

veja um exemplo com o gcc em Windows e os seus erros:
 

PS C:\src\ifdef> gcc -c -Wall -Wextra -Wpedantic -std=c17 cc50.c
cc50.c: In function 'main':
cc50.c:21:17: warning: statement with no effect [-Wunused-value]
   21 |         else (n < skittles);
      |              ~~~^~~~~~~~~~~
cc50.c:27:15: warning: suggest parentheses around assignment used
                       as truth value [-Wparentheses]
   27 |     }  while (n = skittles);
      |               ^
PS C:\src\ifdef> 


O que é cc50?


Isso era o que provavelmente você queria escrever:

 

    do
    {
        if (n > skittles)
        {
            printf("acima do valor, tente um valor menor\n");
            GetInt();
        }
        else //  (n < skittles)
        {
            printf("abaixo do valor, tente um valor maior\n");
            GetInt();
        };  //if

    }  while (n == skittles);

 

Sobre essa linha:
 

	srand(time(NULL));

 

geralmente não é o que você quer. E usar um #include só para pegar a hora e só para fazer isso, muito embora seja tão comum, em geral nem é esperto. O que você quer é uma sequência aleatória --- puristas vão dizer que é pseudo-aleatória --- mas quando está testando e muitas vezes mesmo depois, o que você quer é uma sequência aleatória reproduzível, para poder continuar testando o programa... Então é melhor usar algo como
 

	srand(242202);

 

Ou qualquer número, como a data. Assim pode rodar os testes até estar ok e DEPOIS mudar a semente. Entenda que em geral não é nada esperto e até frustrante descobrir que seu programa falhou para uma sequência que você não pode reproduzir porque é aleatória e a culpa é sua...

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!