c++ problem z funkcja (char[])
Ostatnio zmodyfikowano 2014-11-01 16:17
karlosiak Temat założony przez niniejszego użytkownika |
c++ problem z funkcja (char[]) » 2014-10-31 22:19:52 nie wiem jak zapisac poprawnie aby wlaczylo ta funkcje #include <iostream> #include <string> #include <fstream> #include <ctime> #include<cstdlib> using namespace std; int m, p = 0, tr; void wisielec( char str[] ); int main( int argc, char ** argv ) { fstream plik; srand( time( NULL ) ); int n =( rand() % 4 ); cout << n; plik.open( "text.txt" ); if( plik ) { string linia; for( int t = 0; t < n; t++ ) { getline( plik, linia ); } char * cstr = & linia[ 0 ]; cout << cstr; m = linia.size(); wisielec( cstr[ m ] ); } return 0; } void wisielec( char str[] ) { char odp[ m ]; while( p <= 11 ) { char proba; cin >> proba; if( p < 15 ) { for( int a = 0; a <= m; a++ ) { if( proba == str[ a ] ) { odp[ a ] = proba; tr++; } else { int b; b++; if( b == m ) { p++; cout << "W tym slowie nie ma takiego znaku."; } } switch( p ) { } if( tr == m ) { cout << "WIN!!!! twoje slowo to : " << str; } else if( p == 11 ) { cout << "lose"; } } } } Log : D:\c++\pobieranie x danej z pliku\main.cpp In function 'int main(int, char**)': 25 17 D:\c++\pobieranie x danej z pliku\main.cpp [Error] invalid conversion from 'char' to 'char*' [-fpermissive] 8 6 D:\c++\pobieranie x danej z pliku\main.cpp [Error] initializing argument 1 of 'void wisielec(char*)' [-fpermissive] D:\c++\pobieranie x danej z pliku\main.cpp In function 'void wisielec(char*)': 184 1 D:\c++\pobieranie x danej z pliku\main.cpp [Error] expected '}' at end of input 28 D:\c++\pobieranie x danej z pliku\Makefile.win recipe for target 'main.o' failed
|
|
docentpp |
» 2014-10-31 22:33:03 Mi sie nie podoba ten fragment ! for( int a = 0; a <= m; a++ ) { if( proba == str[ a ] ) { odp[ a ] = proba; tr++; } else { int b; b++; if( b == m )
|
|
karlosiak Temat założony przez niniejszego użytkownika |
» 2014-10-31 22:39:29 b poprawilem int b = 0; 2 bledu nie rozumiem ?? przypisuje wartosc <litere> do odpowiedniego miejsca w czystej tablicy ? jesli jestem w błędzie prosze mnie poprawic ? no i + to nie te bledy ktore szukam :< |
|
Atexor |
» 2014-11-01 13:00:06 - tworzysz wskaźnik o nazwie cstr wskazujący na zmienną typu char, a następnie do funkcji przekazujesz tablicę cstr - deklaracje najlepiej robić na początku kodu, a nie w środku odczytywania z pliku jak masz ze string linia - zmienna linia to string, a następnie przekazujesz adres jej pierwszego elementu jako tablicy & linia[ 0 ]? Kompilator nie wyrzuca błędu, ale osobiście nie spotkałem się czymś takim. - funkcja wisielec "nie wie" co to jest zmienna m, najlepiej przekazać 2 argumenty do funkcji, tablicę i jej rozmiar - nie lepiej wywołać funkcję po odczycie wszystkich danych z pliku, zamiast za każdym razem? - Po co rozmiar stringa linii? - Brakuje jednej klamry zamykającej "}"funkcję void wisielec (na końcu kodu). - w przypadku odczytu z plików i zapisu danych do tablicy lepiej korzystać z dynamicznego przydzielania pamięci, bo nie wiesz jak duża będzie twoja tablica: http://cpp0x.pl/kursy/Kurs-C++/Dynamiczne-zarzadzanie-pamiecia-new-i-delete/307 Tu trochę na szybko zmieniłem Twój kod. Odpala, ale nie wiem czy do końca chodziło o to. Mam nadzieję, że pomogłem. Pozdrawiam #include <iostream> #include <string> #include <fstream> #include <ctime> #include<cstdlib> using namespace std; int m = 0, p = 0, t = 0, tr;
void wisielec( string str[], int tf );
int main( int argc, char ** argv ) { fstream plik; srand( time( NULL ) ); int n =( rand() % 4 ); cout << n; plik.open( "text.txt" ); string * cstr = new string[ m ]; string linia; if( plik ) { getline( plik, linia ); cstr[ t ] = linia; cout << cstr[ t ]; t++; } m = linia.size(); wisielec( cstr, t ); return 0; } void wisielec( string str[], int tf ) { string * odp = new string[ tf ]; while( p <= 11 ) { string proba; cin >> proba; if( p < 15 ) { for( int a = 0; a <= m; a++ ) { if( proba == str[ a ] ) { odp[ a ] = proba; tr++; } else { int b = 0; b++; if( b == m ) { p++; cout << "W tym slowie nie ma takiego znaku."; } } switch( p ) { } if( tr == m ) { cout << "WIN!!!! twoje slowo to : " << str; } else if( p == 11 ) { cout << "lose"; } } } } }
|
|
Monika90 |
» 2014-11-01 16:17:38 - deklaracje najlepiej robić na początku kodu, a nie w środku odczytywania z pliku jak masz ze string linia |
A to dlaczego? - w przypadku odczytu z plików i zapisu danych do tablicy lepiej korzystać z dynamicznego przydzielania pamięci, bo nie wiesz jak duża będzie twoja tablica: http://cpp0x.pl/kursy/Kurs-C++/Dynamiczne-zarzadzanie-pamiecia-new-i-delete/307 |
Nie. new i delete to zło, std::vector to piękno i dobro. |
|
« 1 » |