[XI. Tworzenie warunków złożonych if ... else] Problem z trzecim ćwiczeniem
Witam
moje kolejne pytanie odnosi sie odnosnie trzeciego cwiczenia, a mianowicie programu "kolo fortuny". Ja natomiast nieco utrudnilem sobie zadanie: 1 uzytkownik wprowadza slowo ktore chcialby zeby drugi uzytkownik odgadl, natomiast 2 uzytkownik bedzie wprowadzal 1 literke i program bedzie sprawdzal czy dana literka wystapila i ile razy. Zostala rowniez wprowadzona druga tablica (ktora na poczatku dzialania programu-przed wprowadzeniem przez uzytkownika pierwszej literki) sklada sie z samych kropek (zalozenie jest takie ze 2 tablica-ta wykropkowana i 1 tablica-ta ze slowem do odgadniecia maja taki sam rozmiar, w innym wypadku petla nigdy sie nie zakonczy gdyz ciagi zawsze beda rozne). Ale tu pojawia sie problem w dzialalnosci programu(jako dowod prezentuje wydruki z konsoli):
-jak uzytkownik wprowadzi 1 znak jako "slowo" do odgadniecie to okazuje sie ze ta 2 tablica nie sklada sie z 1 znaku tylko z 3,
Wprowadz slowo do odgadniecia:
r
Jak zostalo zaczytane r
Tu wstawimy kropki
.
.@G
odgadywane slowo i=3-jak uzytkownik wprowadzi 2 znaki jako "slowo" do odgadniecie to okazuje sie ze ta 2 tablica nie sklada sie z 2 znakow tylko z 3,
Wprowadz slowo do odgadniecia:
ri
Jak zostalo zaczytane ri
Tu wstawimy kropki
..
..\
odgadywane slowo i=3-przy wprowadzeniu 3 znakow 2 tablica sklada sie o dziwo z 3 znakow
Wprowadz slowo do odgadniecia:
ric
Jak zostalo zaczytane ric
Tu wstawimy kropki
...
...
odgadywane slowo i=3-kiedy uzytkownik wprowadzi 4 znaki 2 tablica sklada sie z 5 znakow
Wprowadz slowo do odgadniecia:
rica
Jak zostalo zaczytane rica
Tu wstawimy kropki
....
....m
odgadywane slowo i=5-przy wprowadzeniu 5 znakow 2 tablica znowu ma poprawny rozmiar (czyli zgodny z 1 tablica)
Wprowadz slowo do odgadniecia:
ricar
Jak zostalo zaczytane ricar
Tu wstawimy kropki
.....
.....
odgadywane slowo i=5
Moje pytanie brzmi nastepujaco. Czemu wystepuja takie rozbieznosci w rozmiarach tablic znakowych? Moze wynika to z jakiejs definicji tablic znakowych albo po prostu uczynilem jakis blad w kodzie :(
Jakby ktos znal odpowiedz na powyzsze pytanie prosze o odpowiedz :)
Pozdrawiam
Kod:
#include <iostream>
#include <cstring>
#include "ddtconsole.h"
using namespace std;
using namespace ddt::console;
int main()
{
char wprowadz_slowo[ 30 ];
int i;
int k;
int w;
char szukaj;
cout << "Wprowadz slowo do odgadniecia:\n";
cin >> wprowadz_slowo;
cout << "Jak zostalo zaczytane " << wprowadz_slowo << endl;
i = 0;
while( wprowadz_slowo[ i ] != '\0' )
{
i++;
}
w = i;
char odgadywane_slowo[ w ];
cout << "Tu wstawimy kropki \n";
for( int j = 0; j < w; j++ )
{
odgadywane_slowo[ j ] = '.';
cout << odgadywane_slowo[ j ];
}
cout << endl << odgadywane_slowo << endl;
i = 0;
while( odgadywane_slowo[ i ] != '\0' )
{
i++;
}
cout << "odgadywane slowo i=" << i << endl;
while( strcmp( wprowadz_slowo, odgadywane_slowo ) != 0 )
{
cout << "Jaka literke w tekscie chcesz wyszukac?\n";
cin >> szukaj;
i = 0;
k = 0;
while( wprowadz_slowo[ i ] != '\0' )
{
if( szukaj == wprowadz_slowo[ i ] )
{
odgadywane_slowo[ i ] = szukaj;
k++;
}
i++;
}
cout << "\nLiterka " << szukaj << " wystapila " << k << endl;
cout << "Nasze slowo wyglada nastepujaco " << odgadywane_slowo << endl;
}
cout << "BRAWO odgadles szukane slowo: " << odgadywane_slowo << endl;
return 0;
}