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;
}
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.
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;
}
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?
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 ;/
Didar skrev:vi får inte använda oss utav fgets än ;/
Ah ok, my bad :)
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
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! =)