---
title: "svårt problem!"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/99914-svårt-problem"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "Frexuz"
published: "2004-03-20T22:46:32.000Z"
updated: "2004-03-21T16:38:03.000Z"
replies: 11
views: 367
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/99914-svårt-problem"
---

# svårt problem!

## #1 — Frexuz, 2004-03-20T22:46Z

```
void kontroll(char bokstav, char korrektOrd[], char spelarOrd[], int& antalGissningar, int& antalFel, bool gissning, char felGissningar[])
{
	system("cls");
	bool finnsBokstav = false;
	
	for (int i = 0; spelarOrd[i] != tecken; i++)
	{
		if (bokstav == spelarOrd[i])
		{
			finnsBokstav = true;
			gissning = true;
		}
		else
		{
			finnsBokstav = false;
			gissning = false;
			break;
		}
	}

	if (finnsBokstav == false)
	{
		for (int i = 0; i < len; i++)
		{
			if (bokstav == korrektOrd[i])
			{
				spelarOrd[i] = bokstav;
				gissning = true;
				antalGissningar = antalGissningar + 1;
				break;
			}
		}	
	}
				
	if(gissning == false)
	{		
		bool finnsBokstav = false;

		for (int i = 0; felGissningar[i] != '\0'; i++)
		{
			
			if (felGissningar[i] == bokstav)
			{
				finnsBokstav = true;
				break;
			}
		}

		if (finnsBokstav == false)
		{
			felGissningar[i] = bokstav;
			antalFel = antalFel + 1;
			antalGissningar = antalGissningar + 1;
			skrivGubbe(antalFel);
			cout << "FEL!\n\n";
		}
		else
		{
			skrivGubbe(antalFel);
			cout << "FEL!\n\n";
		}
	}
	else
	{
		skrivGubbe(antalFel);
		cout << "R\x8ETT!\n\n";
	}

	skrivFelGissningar(felGissningar);
	skrivGissningar(antalGissningar, antalFel);
}
```

först vill jag kolla om bokstav finns i spelarOrd, finns inte bokstav där redan så vill jag att antalGissningar +1

samma sak sen, kolla om bokstav finns i felGissningar, finns den inte där ska antalGissningar +1

men det fungerar inte direkt, utan den plussar varje gång.

HELA KODEN HÄR: <http://rafb.net/paste/results/Zu375262.html> 

PS: Programmet är en uppgift i programmering kurs-A, så inga avanderade koder osv. Bara försök göra om min så lite som möjligt bara så det blir rätt och funkar.

Permalänk: https://www.webforum.nu/p/99914

## #2 — PeW, 2004-03-21T07:28Z

Eftersom det är en skoluppgift tänker jag inte servera lösningen. Men tänk igenom vad du egentligen gör med din kod. Kör funktionen på 'pappret' och se vad som händer\* med dina flaggor när du gått ur den första loopen och backa sen till vad som fått tillståndet att se ut som det gör så har du där lösningen mitt framför ögonen   :)

\* Utgå från att varje bokstav är fel och att undantaget är om det blir rätt bokstav så ser du att det finns ett logiskt fel med din kod

Permalänk: https://www.webforum.nu/p/1304541

## #3 — Frexuz, 2004-03-21T12:47Z

uppgiften har inte ngt med skolan att göra. menar bara att jag har A-kurs boken, och därför inte vill ha en svårare kod som jag inte förstår mig på

Permalänk: https://www.webforum.nu/p/1304617

## #4 — PeW, 2004-03-21T13:02Z

Okej. Men i all programmering gäller det att avlusa mot alla upptänkliga fel. Logiska lustigheter finns det ingen annan råd till än att gå igenom flödet / händelseförloppet och i såna här fall räcker det gott med papper och penna. 

I ditt fall är det enkelt och det handlar om att byta plats på ett nyckelord... och jag tror att du är mer hjälpt av att hitta felet själv än att jag skriver det i klarttext  ;)

Permalänk: https://www.webforum.nu/p/1304622

## #5 — Frexuz, 2004-03-21T13:06Z

seriöst , jag hittar verkligen inte det :D
satt 2 timmar igår natt

säg bara :D sen e programmet klart och jag kan med nöje börja på kurs-B boken

Permalänk: https://www.webforum.nu/p/1304623

## #6 — PeW, 2004-03-21T13:19Z

Jaja..  i din första loop så vill du tydligen traversera ordet. För varje bokstav så kollar du om bokstaven är lika med en speciell bokstav. 

\- Om det är lika vad händer då? 
\- Om det inte är lika vad händer då?

Om du istället för att ha villkoret "spelarOrd *!= tecken" anger i\<strängens längd och nyttjar ditt 'break' på om det är rätt bokstav istället för om det är fel bokstav. Som det är nu kommer du inte långt i loopen...  om första är fel avbryts sökningen. Om första är rätt avbryts sökningen men flaggan förblir false.*

Permalänk: https://www.webforum.nu/p/1304626

## #7 — Frexuz, 2004-03-21T13:24Z

```
	for (int i = 0; i < len; i++)
	{
		if (bokstav == spelarOrd[i])
		{
			finnsBokstav = true;
			gissning = true;
		}
	}
```

så skulle det vara :D
tack så mycket PeW

Permalänk: https://www.webforum.nu/p/1304627

## #8 — PeW, 2004-03-21T13:27Z

Tjusigt..  

För att slippa traversera hela ordet vid tidig träff kan du lägga in ett break, sist i if-satsen.  :)

\*samt markera svaret som slutgiltig lösning om du anser det  :)

Permalänk: https://www.webforum.nu/p/1304629

## #9 — Frexuz, 2004-03-21T13:46Z

men moget.... nu har jag ett annat fel :(

för varje NY bokstav du gissar FEL på, blir Gissningar + 2 ...
sen gissar jag på den bokstaven igen så plussar den med 1

kan du inte bara skriva koden så jag får det överstökat :(
jag blir bara cp av att själv titta på koden, har gjort d hela helgen nu

Permalänk: https://www.webforum.nu/p/1304633

## #10 — PeW, 2004-03-21T14:07Z

Mjae.. ingen kod, men ett tips: 

Lägg inte uppräkningen av antalet gissningar i varje loop, lägg den globalt EN gång i funktionen istället... (för visst är det väl så att varje gång funktionen körs så har det skett en gissning?) som det är nu finns det risk för lustiga sido-effekter..

Och så var det det där med papper och penna (\*visslar försynt)  ;)

Permalänk: https://www.webforum.nu/p/1304636

## #11 — Frexuz, 2004-03-21T15:52Z

va du är envis :D

Permalänk: https://www.webforum.nu/p/1304673

## #12 — PeW, 2004-03-21T16:38Z

Jag vet inte vad du gör för fel men följande funkar med antal gissningar o.s.v, ivf när jag testar den \<kompilerat med g++\> samt resten av koden som fanns på den länken du angav

```
void kontroll(char bokstav, char korrektOrd[], char spelarOrd[], int& antalGissningar, int& antalFel, bool gissning, char felGissningar[])
{
	system("cls");
	bool finnsBokstav = false;
	int i;
	for (i = 0; i<strlen(spelarOrd); i++)
	{
		if (bokstav == spelarOrd[i])
		{
			finnsBokstav = true;
			gissning = true;
                        break;
		}
	
	}

	if (finnsBokstav == false)
	{
		for (i = 0; i < len; i++)
		{
			if (bokstav == korrektOrd[i])
			{
				spelarOrd[i] = bokstav;
				gissning = true;
				antalGissningar = antalGissningar + 1;
				break;
			}
		}	
	}
				
	if(gissning == false)
	{		
		bool finnsBokstav = false;

		for (i = 0; felGissningar[i] != '\0'; i++)
		{
			
			if (felGissningar[i] == bokstav)
			{
				finnsBokstav = true;
				break;
			}
		}

		if (finnsBokstav == false)
		{
			felGissningar[i] = bokstav;
			antalFel = antalFel + 1;
			antalGissningar = antalGissningar + 1;
			skrivGubbe(antalFel);
			cout << "FEL!\n\n";
		}
		else
		{
			skrivGubbe(antalFel);
			cout << "FEL!\n\n";
		}
	}
	else
	{
		skrivGubbe(antalFel);
		cout << "R\x8ETT!\n\n";
	}

	skrivFelGissningar(felGissningar);
	skrivGissningar(antalGissningar, antalFel);
}
```

(!) Det där "len" gäller det korrekta ordet, så kör med strlen(ordet) istället för att få aktuell längd. Annars kanske du läser in data som inte har med ordet att göra.

Permalänk: https://www.webforum.nu/p/1304697

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/99914-svårt-problem
