NielsDesmet
Gebruiker
- Lid geworden
- 19 mei 2008
- Berichten
- 301
We zijn voor de school bezig met een spelletje Lingo te implementeren.
We hebben echter een rare fout met een char-array die blijkbaar na een cin de eerste 3 letters gewoon doet verdwijnen! Ik zal hier eens de volledige code posten, maar de betreffende functies zijn eigenlijk enkel "vraagwoord" en "zoeklengte". In die functies heb ik ook een paar commando's gestoken die ons in de gaten laat houden wat er precies allemaal aan het gebeuren is.
Het resultaat is als volgt:
Merk op dat hij om een of andere reden van "appelflap" "elflap " maakt en van "snoepke" maakt hij "epke", hij vergeet dus gewoon de eerste 3 letters en zet er een spatie achter.
Wat is er fout?
We hebben echter een rare fout met een char-array die blijkbaar na een cin de eerste 3 letters gewoon doet verdwijnen! Ik zal hier eens de volledige code posten, maar de betreffende functies zijn eigenlijk enkel "vraagwoord" en "zoeklengte". In die functies heb ik ook een paar commando's gestoken die ons in de gaten laat houden wat er precies allemaal aan het gebeuren is.
Code:
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
typedef char Woord10[10];
typedef bool Ger10[10];
void WisScherm()
{
system("cls");
}
void titel()
{
cout<<" Team Superior Presents:\n";
cout<<" # # # # ## ##\n";
cout<<" # # ## # # # #\n";
cout<<" # # # ## # # # #\n";
cout<<" ### # # # ## ##\n";
cout<<"Druk op ENTER om te starten!\n";
cin.get();
WisScherm();
}
void zoeklengte(Woord10 woord, int &lengtewoord)
{
cout<<"Zoeklengte is juist gecalled; Woord is: "<<woord<<" , lengtewoord is: "<<lengtewoord<<" .\n";
cin.get();
lengtewoord = 0;
cout<<"Lengtewoord zou nu nul moeten zijn en de lus zal subiet gestart worden; Woord is: "<<woord<<" , lengtewoord is: "<<lengtewoord<<" .\n";
cin.get();
while(woord[lengtewoord] != '*')
{
cout<<"woord["<<lengtewoord<<"] is "<<woord[lengtewoord]<<"; Woord is: "<<woord<<" , lengtewoord is: "<<lengtewoord<<" .\n";
cin.get();
lengtewoord++;
cout<<"Lengtewoord is eentje bijgeteld; Woord is: "<<woord<<" , lengtewoord is: "<<lengtewoord<<" .\n";
cin.get();
}
}
void vraagwoord(Woord10 &woord, int &lengtewoord)
{
cout<<"Vraagwoord is juist gecalled; Woord is: "<<woord<<" , lengtewoord is: "<<lengtewoord<<" .\n";
cin.get();
for(int i = 0; i < 10; i++)
{
woord[i] = '*';
}
cout<<"De sterrekeslus is compleet; Woord is: "<<woord<<" , lengtewoord is: "<<lengtewoord<<" .\n";
cin.get();
do{
cout<<"Do...While is gestart; Woord is: "<<woord<<" , lengtewoord is: "<<lengtewoord<<" .\n";
cin.get();
cout<<"Geef het woord in:\n";
cin>>woord;
cout<<"Ge hebt het woord ingegeven; Woord is: "<<woord<<" , lengtewoord is: "<<lengtewoord<<" .\n";
cin.get();
zoeklengte(woord, lengtewoord);
cout<<"Zoeklengte is voltooid; Woord is: "<<woord<<" , lengtewoord is: "<<lengtewoord<<" .\n";
cin.get();
}while(lengtewoord <2 && lengtewoord > 10);
WisScherm();
}
void bepalenincompleetwoord(int lengtewoord, Woord10 &woordincompleet, Ger10 geraden, Woord10 woord)
{
int i;
for(i=0;i<=lengtewoord - 1; i++)
{
if(geraden[i])
{
woordincompleet[i] = woord[i];
}
else
{
woordincompleet[i] = '*';
}
}
}
void voorbereiden(int &beurten, int Startbeurten, int &lengtewoord, Ger10 &geraden)
{
int i;
beurten = Startbeurten;
geraden[0] = true;
for(i = 1; i<=lengtewoord; i++)
{
geraden[i] = false;
}
}
void schrijfletters(Woord10 woord, Ger10 geraden, int lengtewoord)
{
Woord10 woordincompleet;
int i;
int j;
bepalenincompleetwoord(lengtewoord, woordincompleet, geraden, woord);
cout<<"/-";
for(i=1; i<= lengtewoord; i++)
{
cout<<"-";
}
cout<<"-\\"<<endl;
cout<<"|"<<woordincompleet<<"|"<<endl;
cout<<"\\-";
for(j=1; j<= lengtewoord; j++)
{
cout<<"-";
}
cout<<"-/"<<endl;;
}
void schrijfbeurtenover(int beurten)
{
cout<<"Je hebt "<<beurten<<" beurten over\n";
}
void zoeklengteletters(int &LengteLetters, Woord10 letters, int tellerke)
{
do{
LengteLetters++;
}while(letters[tellerke] != ' ');
}
void vraagletters(int LengteLetters, Woord10 &letters, int lengtewoord)
{
int tellerke=0;
do{
cout<<"Geef in welk woord dat je denkt dat juist is\n";
cin>>letters;
zoeklengteletters(LengteLetters, letters, tellerke);
tellerke++;
}while(LengteLetters != lengtewoord);
}
void checkwoord(int lengtewoord, Woord10 letters, Woord10 woord, Ger10 &geraden, bool &WoordGeraden)
{
int i;
for(i=0; i<lengtewoord; i++)
{
if(letters[i] == woord[i])
{
geraden[i] = true;
}
}
WoordGeraden = true;
for(i=0; i<lengtewoord; i++)
{
if(geraden[i] == false)
{
WoordGeraden = false;
}
}
}
void winnen(char Nogeens)
{
cout<<"goed zo! Je hebt het woord geraden!\n";
cout<<"Wil je nog een keer?(J/N)/n";
cin>>Nogeens;
WisScherm();
}
void verliezen(char Nogeens)
{
cout<<"Jammer, je hebt verloren...\n";
cout<<"Wil je nog een keer?(J/N)/n";
cin>>Nogeens;
WisScherm();
}
void main()
{
Woord10 woord;
Ger10 geraden;
int lengtewoord;
char Nogeens = 'j';
int const Startbeurten = 5;
int beurten;
Woord10 letters;
bool WoordGeraden;
int LengteLetters = 0;
titel();
do{
vraagwoord(woord, lengtewoord);
voorbereiden(beurten, Startbeurten, lengtewoord, geraden);
while(WoordGeraden = false && beurten < 0)
{
schrijfletters(woord, geraden, lengtewoord);
schrijfbeurtenover(beurten);
vraagletters(LengteLetters, letters, lengtewoord);
checkwoord(lengtewoord, letters, woord, geraden, WoordGeraden);
}
}while(Nogeens == 'j' || Nogeens == 'J');
if(WoordGeraden = true)
{
winnen(Nogeens);
}
else
{
verliezen(Nogeens);
}
}
Het resultaat is als volgt:
Code:
Vraagwoord is juist gecalled; Woord is: ╠╠╠╠╠╠╠╠╠╠╠╠└*↕ , lengtewoord is: -85899
3460 .
appelflap*
De sterrekeslus is compleet; Woord is: **********╠╠└*↕ , lengtewoord is: -858993
460 .
Do...While is gestart; Woord is: **********╠╠└*↕ , lengtewoord is: -858993460 .
Geef het woord in:
Ge hebt het woord ingegeven; Woord is: elflap* , lengtewoord is: -858993460 .
Zoeklengte is juist gecalled; Woord is: elflap* , lengtewoord is: -858993460 .
Lengtewoord zou nu nul moeten zijn en de lus zal subiet gestart worden; Woord is
: epke , lengtewoord is: 0 .
woord[0] is e; Woord is: epke , lengtewoord is: 0 .
Lengtewoord is eentje bijgeteld; Woord is: epke , lengtewoord is: 1 .
woord[1] is p; Woord is: epke , lengtewoord is: 1 .
Lengtewoord is eentje bijgeteld; Woord is: epke , lengtewoord is: 2 .
woord[2] is k; Woord is: epke , lengtewoord is: 2 .
Lengtewoord is eentje bijgeteld; Woord is: epke , lengtewoord is: 3 .
woord[3] is e; Woord is: epke , lengtewoord is: 3 .
Lengtewoord is eentje bijgeteld; Woord is: epke , lengtewoord is: 4 .
woord[4] is ; Woord is: epke , lengtewoord is: 4 .
Lengtewoord is eentje bijgeteld; Woord is: epke , lengtewoord is: 5 .
Zoeklengte is voltooid; Woord is: epke , lengtewoord is: 5 .
Vraagwoord is juist gecalled; Woord is: epke , lengtewoord is: 5 .
De sterrekeslus is compleet; Woord is: **********╠╠└*↕ , lengtewoord is: 5 .
Do...While is gestart; Woord is: **********╠╠└*↕ , lengtewoord is: 5 .
Geef het woord in:
Merk op dat hij om een of andere reden van "appelflap" "elflap " maakt en van "snoepke" maakt hij "epke", hij vergeet dus gewoon de eerste 3 letters en zet er een spatie achter.
Wat is er fout?