7 svar
264 visningar
Didar 212
Postad: 17 sep 2022 20:21

Gissa talet

 

 

 

 

Hej! Jag har skrivit denna kod där användaren ska gissa ett tal mellan 1-100. 

Jag vet inte hur jag ska få programmet skriva ut (antalet försök) som det tog för användaren att gissa rätt på talet.

 

Jag har deklarerat (numberofguess).

 

 

 

 

 

#include <stdio.h>

//bibloteket för att slumpa tal

#include <stdlib.h>

#include <time.h>

 

 

 

int main()

 


{

    

    srand(time(NULL));

    

    

    //rand skapar ett slumptal mellan 0 och något högt tal

    int number = (rand() %100) + 1;

    int guess = 0;

    int numberofguess = 0;

    

    do {

        //in och utmatning

        printf("Enter a guess! \n ");

        scanf("%d" , &guess);

        

        if (guess == number)

        {

            printf("You got it! \n");

            

        }

        else if (guess < number)

        {

            printf("Guess Higher! \n");

            numberofguess++;

        }

        else if (guess > number)

        {

            printf("Guess lower! \n");

            numberofguess++;

        }

        

        else

            printf("you've guessed the number in %d attempts \n" , numberofguess);

        

        //så länge användare inte gissar rätt så fortsätter programmet att köras

    } while(guess != number);

    

 

    return 0;

 

}

Laguna Online 30711
Postad: 17 sep 2022 21:11

Raden

printf("you've guessed the number in %d attempts \n" , numberofguess);

kommer aldrig att köras där den står nu. Flytta den till antingen under guess==number eller efter hela loopen.

anders_k 237
Postad: 18 sep 2022 06:19 Redigerad: 18 sep 2022 06:27

Din scanf har formatspec "%d" det gör att \n ligger kvar i bufferten, ändra till " %d" eller ännu bättre, ändra till fgets/sscanf istället.

#include <stdio.h>

//bibloteket för att slumpa tal
#include <stdlib.h>
#include <time.h>

int main()
{
  srand(time(NULL));
  //rand skapar ett slumptal mellan 0 och något högt tal
  int number = (rand() %100) + 1;
  int guess = 0;
  int numberofguess = 0;

  do 
  {
    //in och utmatning
    printf("Enter a guess! \n ");
    scanf("%d" , &guess);  

    if (guess == number)
    {
      printf("You got it! \n");
    }
    else if (guess < number)
    {
      printf("Guess Higher! \n");
      numberofguess++;
    }
    else if (guess > number)
    {
      printf("Guess lower! \n");
      numberofguess++;
    }
    else
     printf("you've guessed the number in %d attempts \n" , numberofguess);
    //så länge användare inte gissar rätt så fortsätter programmet att köras

  } 
  while(guess != number);
  
  return 0;
}

t.ex.

 

int getNumber()
{
  int n = -1;
  char buf[255];
  if (fgets(buf,sizeof(buf),stdin) != NULL) // läser en rad inklusive \n
  {
    if (sscanf(buf,"%d", &n) == 1) // här behovs inte " %d" eftersom fgets används
    {
      // här skulle du kunna utvärdera värdet
      return n;
    }
    printf("felaktigt nummer\n");
  }
  return n;
}

 

 

 

Didar 212
Postad: 18 sep 2022 21:17
Laguna skrev:

Raden

printf("you've guessed the number in %d attempts \n" , numberofguess);

kommer aldrig att köras där den står nu. Flytta den till antingen under guess==number eller efter hela loopen.

Tack för hjälpen!

kan du förklara lite kort varför den inte körs när den ligger där den gör? 

Didar 212
Postad: 18 sep 2022 21:18
anders_k skrev:

Din scanf har formatspec "%d" det gör att \n ligger kvar i bufferten, ändra till " %d" eller ännu bättre, ändra till fgets/sscanf istället.

#include <stdio.h>

//bibloteket för att slumpa tal
#include <stdlib.h>
#include <time.h>

int main()
{
  srand(time(NULL));
  //rand skapar ett slumptal mellan 0 och något högt tal
  int number = (rand() %100) + 1;
  int guess = 0;
  int numberofguess = 0;

  do 
  {
    //in och utmatning
    printf("Enter a guess! \n ");
    scanf("%d" , &guess);  

    if (guess == number)
    {
      printf("You got it! \n");
    }
    else if (guess < number)
    {
      printf("Guess Higher! \n");
      numberofguess++;
    }
    else if (guess > number)
    {
      printf("Guess lower! \n");
      numberofguess++;
    }
    else
     printf("you've guessed the number in %d attempts \n" , numberofguess);
    //så länge användare inte gissar rätt så fortsätter programmet att köras

  } 
  while(guess != number);
  
  return 0;
}

t.ex.

 

int getNumber()
{
  int n = -1;
  char buf[255];
  if (fgets(buf,sizeof(buf),stdin) != NULL) // läser en rad inklusive \n
  {
    if (sscanf(buf,"%d", &n) == 1) // här behovs inte " %d" eftersom fgets används
    {
      // här skulle du kunna utvärdera värdet
      return n;
    }
    printf("felaktigt nummer\n");
  }
  return n;
}

 

 

 

vi får inte använda oss utav fgets än ;/ 

anders_k 237
Postad: 20 sep 2022 12:53
Didar skrev:

vi får inte använda oss utav fgets än ;/ 

Ah ok, my bad :)

anders_k 237
Postad: 20 sep 2022 12:55
Didar skrev:
Laguna skrev:

Raden

printf("you've guessed the number in %d attempts \n" , numberofguess);

kommer aldrig att köras där den står nu. Flytta den till antingen under guess==number eller efter hela loopen.

Tack för hjälpen!

kan du förklara lite kort varför den inte körs när den ligger där den gör? 

Anledningen till att din sista else inte kör är att du redan har kollat igenom alla alternativ

större än + mindre än + lika 

Didar 212
Postad: 20 sep 2022 16:52
anders_k skrev:
Didar skrev:
Laguna skrev:

Raden

printf("you've guessed the number in %d attempts \n" , numberofguess);

kommer aldrig att köras där den står nu. Flytta den till antingen under guess==number eller efter hela loopen.

Tack för hjälpen!

kan du förklara lite kort varför den inte körs när den ligger där den gör? 

Anledningen till att din sista else inte kör är att du redan har kollat igenom alla alternativ

större än + mindre än + lika 

jaha okej då vet jag, tack för hjälpen! =)

Svara
Close