Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Generator imion

Ostatnio zmodyfikowano 2016-12-11 11:54
Autor Wiadomość
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) :
C/C++
#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 ); // imie
    std::fstream fixy;
    prefixy.open( "fixy", std::ios::in ); // rasa
    std::fstream sufixy;
    sufixy.open( "sufixy", std::ios::in ); // rola
   
    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:
C/C++
suzie
suzie alex
george
marthy
young bob
bob
P-154741
carlosmay
» 2016-12-10 20:07:33
błąd w 24 linijce
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ć.
P-154743
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 :)
P-154768
carlosmay
» 2016-12-11 10:06:15
prefixy.open( "prefixy", std::ios::in );
C/C++
prefixy.open( "prefixy.txt", std::ios::in ); // i wyłącz w systemie ukrywanie popularnych rozszeżeń

Nie sprawdzasz poprawności otwierania plików.

Przykład z std::vector<>:
C/C++
{
    std::vector < std::string > prefixy;
   
    // tutaj otwieranie plików
    // fstream file...
   
    string line { };
    while( getline( file, line ) ) {
        prefixy.push_back( line );
    }
}

P-154770
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ł.

C/C++
#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 ) {
    // Otwarcie pliku
    std::ifstream file( file_name, std::ios::in );
    if( !file ) {
        std::cerr << "File open error: " << file_name << std::endl;
        std::exit( EXIT_FAILURE );
    }
    // Wypełnienie tablicy do max_size elementów...
    size_t count = 0;
    for( std::string line; getline( file, line ) and count < max_size; ++count )
    {
        table[ count ] = line;
    }
    // W trakcie opuszczania funkcji, nastąpi automatyczne zamknięcie pliku.
   
    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 ); // imie
    fix_count = fill_table_from_file( "fixy", tablefixy, 100 ); // rasa
    sufix_count = fill_table_from_file( "sufixy", tablesufixy, 100 ); // rola
   
    std::srand( std::time( NULL ) );
    std::cout << tableprefixy[ random_value( prefix_count ) ]
    << tablefixy[ random_value( fix_count ) ]
    << tablesufixy[ random_value( sufix_count ) ] << std::endl;
}
P-154773
« 1 »
  Strona 1 z 1