Problem z wisielcem

1

Witam!
Na lekcji programowania dostałem zadanie, żeby zrobić program (grę) pt. "wisielec". Napisałem parę linijek i w tych linijkach jest błąd ale nie wiem gdzie.
Proszę pomóżcie. Z góry dzięki.
O to ten kod:

#include<iostream>
#include <string>
using namespace std;
void wczytaj (string &wyraz)
{
	cout<<"podaj wyraz"<<endl;
	cin>>wyraz;
}
void zamiana(string wisielec, int pozycja, string litera)
{
	wisielec.erase( pozycja, 1 );
	wisielec.insert( pozycja, litera);
}
void wyszukaj (string wyraz, char znak, int & cos)
{
	cos = wyraz.find(znak,cos);
}
int main()
{
	cout<<"Witam w programie"<<endl;
	string wyraz,wisielec,litera;
	int dlugosc;
	char litera2;
	wczytaj(wyraz);
	dlugosc=wyraz.size();
	int pozycja=-1,bledy=0,poprawna=0;
	for(int i=0;i<dlugosc;i++){
	wisielec=wisielec+"_ ";
	}
	for(;bledy<10&&poprawna<dlugosc;){
	cout<<wisielec<<endl;
	cout<<endl<<"podaj litere"<<endl;
	cin>>litera;
	litera2=litera[0];
	int i=0;
	do{
	int pozycja2;
	wyszukaj(wyraz,litera2,pozycja2);
	if(pozycja2==pozycja){i++;
	cout<<"pozycja2==pozycja"<<endl;
	}
	else if(pozycja2==string::npos){
	bledy++;
	i++;
	cout<<"pozycja2==string::npos"<<bledy<<endl;
	}
	else {
	pozycja=pozycja2;
	zamiana(wisielec,pozycja,litera);
	poprawna++;
	cout<<"poprawna"<<endl;
	}
	}while(i==0);
	}
cin.get();
cin.get();
return 0;
}
 

PS
Oczywiście jest pisany w C++

0

Napisałem 2 raz Wisielca innym sposobem i dalej nie działa. A mianowicie nie chce mi zliczać błędów oraz nie chce podmieniać liter. Proszę pomóżcie.
Oto moje wypociny:

#include<iostream>
#include<string>
#include<windows.h>
using namespace std;
string wczytaj ()
{
	string wyraz;
	cout<<"podaj wyraz"<<endl;
	cin>>wyraz;
	return wyraz;
}
int main ()
{
	cout<<"Witaj w programie"<<endl;
	Sleep(2000);
	string wyraz;
	wyraz=wczytaj();
	int poprawna=0, blad=0, dlugosc;
	dlugosc=wyraz.size();
	char wisielec[dlugosc],wyraz2[dlugosc],litera;
	for(int i=0;i<dlugosc;i++){
		wisielec[i]='_';
		wyraz2[i]=wyraz[i];
	}
	for(;blad<10&&poprawna<dlugosc;){
	for(int i=0;i<dlugosc;i++){
		cout<<" "<<wisielec[i];
	}
	cout<<"podaj litere"<<endl;
	cin>>litera;
	int a=0;
	for(int i=0;i<dlugosc;i++){
		if(wisielec[i]==litera){
		wyraz2[i]=litera;
		poprawna++;
		a++;}	
	}
	if(a==0)blad++;
	}
	for(int i=0;i<dlugosc;i++){
		cout<<" "<<wisielec[i];
	}
	cin.get();
	cin.get();
	return 0;
}
 
0
A mianowicie nie chce mi zliczać błędów oraz nie chce podmieniać liter.

Cud, że się w ogóle kompiluje.

Definiujesz tablicę dynamiczną jak statyczną, co jest niedozwolone w języku C++.

Dokładnie błąd jest w tych dwóch linijkach:

dlugosc=wyraz.size();
        char wisielec[dlugosc],wyraz2[dlugosc]

Poza tym

for(;blad<10&&poprawna<dlugosc;)

nie prościej i zgrabniej by było wstawić zamiast tego

while(blad<10&&poprawna<dlugosc)

?

I jeszcze jedna sprawa- nie wszystkie zmienne są zadeklarowane.

1

Mylisz "wisielec" i "wyraz2" w drugim forze głównej pętli programu.

A póki korzystasz z gcc, to nie musisz się martwić o problem z tablicami wyżej.

0

Popełniłem takie coś kiedy byłem jeszcze młodym padawanem
http://4programmers.net/Pastebin/1664
Może to jakimś cudem działa i ci się przyda ;]

0

Wielkie dzięki Flaker. Dzięki tobie program działa.:)

0

Mam jeszcze jedno pytanie do was. Jak wczytać np. tylko 5 linijkę z pliku txt.
Napisałem coś takiego:
ifstream odczyt;
odczyt.open("wisielec.txt");
odczyt>>wyraz;
odczyt.close();
ale to nawet nie chce wczytać wyrazu:( Proszę pomóżcie. Z góry dzięki

0

Skorzystaj z getline() i składowej ignore() dla istream'ów.

0

Dzięki wszystkim program dzięki waszej pomocy działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1