Generator imion
Ostatnio zmodyfikowano 2016-12-11 11:54
beniz Temat założony przez niniejszego użytkownika |
Generator imion » 2016-12-10 19:43:34 Hej - w skrócie: Potrzebuję napisać generator, który będzie pobierał z trzech plików tekstowych człony imion, a następnie składał je w całość. Kod z którym mam problem znajduje się poniżej (błąd w 24 linijce) : #include <iostream> #include <fstream>
int main() { std::string tabprefixy[ 100 ]; std::string tabfixy[ 100 ]; std::string tabsufixy[ 100 ]; std::fstream prefixy; prefixy.open( "prefixy", std::ios::in ); std::fstream fixy; prefixy.open( "fixy", std::ios::in ); std::fstream sufixy; sufixy.open( "sufixy", std::ios::in ); std::string napis; std::string temp; int lp = 0; while( !prefixy.eof() ) { getline( prefixy, napis ); tabprefixy[ lp ] = napis; lp++; } prefixy.close(); int lf = 0; while( !fixy.eof() ) { getline( fixy, napis ); tabfixy[ lf ] = napis; lf++; } fixy.close(); int ls = 0; while( !sufixy.eof() ) { getline( sufixy, napis ); tabsufixy[ ls ] = napis; ls++; } sufixy.close(); srand( time( NULL ) ); int rp = rand() % lp; int rf = rand() % lf; int rs = rand() % ls; std::cout << tabprefixy[ rp ]; tabfixy[ rf ]; tabsufixy[ rs ]; return 0; }
pliki prefixy, fixy oraz sufixy mają następującą strukture: suzie suzie alex george marthy young bob bob
|
|
carlosmay |
» 2016-12-10 20:07:33 Czyli? Linie nie są ponumerowane. Zamiast surowych tablic użyj std::array<> lub lepiej std::vector<>. Błąd w linii 24 ma jakąś treść, którą należało by podać. |
|
beniz Temat założony przez niniejszego użytkownika |
» 2016-12-11 09:52:29 Nie wiem jak skopiować ten błąd z xcode, dlatego umieszczam screena poniżej. Forum ucięło treść ale po kliknięciu w obrazek widać o co chodzi :) |
|
carlosmay |
» 2016-12-11 10:06:15 prefixy.open( "prefixy", std::ios::in ); |
prefixy.open( "prefixy.txt", std::ios::in );
Nie sprawdzasz poprawności otwierania plików. Przykład z std::vector<>: { std::vector < std::string > prefixy; string line { }; while( getline( file, line ) ) { prefixy.push_back( line ); } } |
|
mokrowski |
» 2016-12-11 11:54:44 Powtarzasz takie same linie kodu... Tu masz (prawie) poprawiony kod. Da się go jeszcze poprawić ale odbiegał by daleko od pierwotnego i bałem się że nie będziesz rozumiał. #include <iostream> #include <fstream> #include <string> #include <cstdlib>
size_t fill_table_from_file( const std::string & file_name, std::string table[], size_t max_size ) { std::ifstream file( file_name, std::ios::in ); if( !file ) { std::cerr << "File open error: " << file_name << std::endl; std::exit( EXIT_FAILURE ); } size_t count = 0; for( std::string line; getline( file, line ) and count < max_size; ++count ) { table[ count ] = line; } return count; }
size_t random_value( size_t max_value ) { return rand() % max_value; }
int main() { std::string tableprefixy[ 100 ]; std::string tablefixy[ 100 ]; std::string tablesufixy[ 100 ]; size_t prefix_count; size_t fix_count; size_t sufix_count; prefix_count = fill_table_from_file( "prefixy", tableprefixy, 100 ); fix_count = fill_table_from_file( "fixy", tablefixy, 100 ); sufix_count = fill_table_from_file( "sufixy", tablesufixy, 100 ); std::srand( std::time( NULL ) ); std::cout << tableprefixy[ random_value( prefix_count ) ] << tablefixy[ random_value( fix_count ) ] << tablesufixy[ random_value( sufix_count ) ] << std::endl; }
|
|
« 1 » |