4 svar
159 visningar
xFisherking är nöjd med hjälpen
xFisherking 6
Postad: 6 jun 2023 16:15

Gissa Talet med Do While-Loop

Hejsan!
Jag försöker att skriva ett program som innehåller en Do While-loop, men efter lite korrigerande så kan jag inte längre få igång programmet och det ställer till med väldigt mycket i min okunskap.
Vad är det jag har missat här?

 

using System;

class Program {
public static void Main (string[] args) {
//Värden
int min = 1;
int max = 100;
int guess;
int number;
int guesses;

String Response;
bool PlayAgain = true;
Random random = new Random();

do {
guess = 0;
guesses = 0;
Response = "";
number = random.Next(min, max + 1);

while (guess != number){
Console.WriteLine("Hej och välkommen till Gissa Talet! Jag kommer att tänka på ett slumpmässigt tal och det är upp till dig att gissa på vilket!");
Console.WriteLine("Vilket tal tänker jag på?");
Console.WriteLine(number);
guess = Convert.ToInt32(Console.ReadLine());
} while (guess != number);
if (guess > number) {
Console.WriteLine(guess + "Talet var för högt! Prova något lägre!");
if (guess - number < 5)
{
Console.WriteLine("Men det var väldigt nära!");
}

else if (guess < number) {
Console.WriteLine("Talet var för lågt! Prova något större!");
if (guess - number < 5)
{
Console.WriteLine("Men det var väldigt nära!");
}
}
}
Console.WriteLine("Du vann! Talet jag tänkte på var" + number +"!");
Console.WriteLine("Du lyckades gissa rätt med " + guesses + " gissningar!");

Console.WriteLine("Vill du spela igen? (Y/N)");
Response = Console.ReadLine();
Response = Response.ToUpper();

if (Response == "Y"){
PlayAgain = true;
}
if (Response == "N"){
PlayAgain = false;
}



Peter_ 470 – Avstängd
Postad: 6 jun 2023 16:50 Redigerad: 6 jun 2023 16:53

Du har en do-loop som saknar while(<villkor>);

Random random = new Random();

do {
guess = 0;

...

} (ingen while)

anders_k Online 234
Postad: 6 jun 2023 17:14

Om du formaterar din kod så ser du enklare vad som är fel.

using System;

class Program 
{
  public static void Main (string[] args) 
  {
	//Värden
	int min = 1;
	int max = 100;
	int guess;
	int number;
	int guesses;

	String Response;
	bool PlayAgain = true;
	Random random = new Random();

	do 
	{
		guess = 0;
		guesses = 0;
		Response = "";
		number = random.Next(min, max + 1);

		while (guess != number)
		{
			Console.WriteLine("Hej och välkommen till Gissa Talet! Jag kommer att tänka på ett slumpmässigt tal och det är upp till dig att gissa på vilket!");
			Console.WriteLine("Vilket tal tänker jag på?");
			Console.WriteLine(number);
			guess = Convert.ToInt32(Console.ReadLine());
		} 
		while (guess != number); // ---HÄR BÖRJAR PROBLEMEN---
		if (guess > number) 
		{
			Console.WriteLine(guess + "Talet var för högt! Prova något lägre!");
			if (guess - number < 5)
			{
				Console.WriteLine("Men det var väldigt nära!");
			}
			else if (guess < number) 
			{
				Console.WriteLine("Talet var för lågt! Prova något större!");
				if (guess - number < 5)
				{
					Console.WriteLine("Men det var väldigt nära!");
				}
			}
		}
		Console.WriteLine("Du vann! Talet jag tänkte på var" + number +"!");
		Console.WriteLine("Du lyckades gissa rätt med " + guesses + " gissningar!");

		Console.WriteLine("Vill du spela igen? (Y/N)");
		Response = Console.ReadLine();
		Response = Response.ToUpper();

		if (Response == "Y")
		{
			PlayAgain = true;
		}
		if (Response == "N")
		{
			PlayAgain = false;
		}
//--- HÄR VERKAR KOD SAKNAS ---
xFisherking 6
Postad: 6 jun 2023 18:39
Peter_ skrev:

Du har en do-loop som saknar while(<villkor>);

Random random = new Random();

do {
guess = 0;

...

} (ingen while)

Nej den finns med där!
Den hamnade mellan guess = convert... och cw(Talet var för högt linjerna!)

Oavsett vart jag än placerar den där måsvingen så får jag bara ett felmeddelande om att den förväntar sig en motsvarande måsvinge, jag försöker följa samma tab som ursprunget men till ingen lycka!

Peter_ 470 – Avstängd
Postad: 7 jun 2023 16:20 Redigerad: 7 jun 2023 16:37

Din kod: 

while (guess != number)
{
Console.WriteLine("Hej och välkommen till Gissa Talet! Jag kommer att tänka på ett slumpmässigt tal och det är upp till dig att gissa på vilket!");
Console.WriteLine("Vilket tal tänker jag på?");
Console.WriteLine(number);
guess = Convert.ToInt32(Console.ReadLine());
} while (guess != number) ;

är fel. Du måste skilja på en while-loop:
while (villkor)
{
   (din kod)
}
och en do-loop:
do
{
   (din kod)
} while (villkor);

Du måste se till att måsvingen { efter do har en motsvarande } följt av ett while-villkor.
I din kod har den inte det. När jag kompilerar din kod får jag:
error CS1513: } expected
error CS1003: Syntax error, 'while' expected
error CS1003: Syntax error, '(' expected
error CS1733: Expected expression
error CS1026: ) expected
error CS1002: ; expected

på sista raden
if (Response == "N")
{
PlayAgain = false;
} // <- HÄR

1. Lägg till en måsvinge '}'. Kompilera.
2. Fortsätt enligt felrapporten och kompilera mellan varje rättning

Kommer du vidare?

 

Svara Avbryt
Close