mgrD Temat założony przez niniejszego użytkownika |
Plik do odczytu i zapisu jednocześnie(globalnie) ~ kłopot z zapisem. » 2014-01-20 12:01:20 Witam, chciałbym zapytać czy istnieje opcja otworzenie pliku do zapisu i odczytu jednocześnie(będę w pętli raz zapisywał wyraz a raz odczytywał) -> Teoretycznie wiem, że otwarcie pliku w trybie out and in da mi żądany efekt, lecz otwieram plik w głównej funkcji programu(main) a czytam plik we własnej funkcji. Przykład: int main() { std::fstream plik( "liczby.txt", std::ios::out | std::ios::in ); }
bool sprawdz( int in ) { for( int p = 0; p < in; p++ ) { if( tekscik[ p ] == tekscik[ in ] ) return 1; } while( std::getline( plik, str ) ) { found = str.find( tekscik[ in ] ); if( found == std::string::npos ) { return 1; break; } } return 0; }
Co oznacza, że w pętli while dostaje błąd: \main.cpp||In function 'bool sprawdz(int)':| \main.cpp|63|error: 'plik' was not declared in this scope| \main.cpp|66|warning: comparison between signed and unsigned integer expressions [-Wsign-compare]| ||=== Build finished: 1 errors, 2 warnings (0 minutes, 0 seconds) ===|
Próbowałem dać std::fstream plik( "liczby.txt", std::ios::out | std::ios::in ); przed funkcją main lecz wtedy zapis/odczyt(+tworzenie pliku) nie działa poprawnie. |
|
oputyk |
» 2014-01-20 13:20:25 Z tego co tu widzę, to wywala Ci błąd o tym, że obiekt zd nie jest znany. |
|
mgrD Temat założony przez niniejszego użytkownika |
» 2014-01-20 13:59:44 @Poprawione, chodzi o "plik". Czekam na dalsze sugestie : ) |
|
Monika90 |
» 2014-01-20 14:05:10 Przkazuj plik do funkcji przez referencję |
|
oputyk |
» 2014-01-20 14:07:09 Obiekt plik jest globalny? Jeśli nie to go prześlij za pomocą referencji do funkcji, albo zdefiniuj nowy plik w funkcji. |
|
mgrD Temat założony przez niniejszego użytkownika |
» 2014-01-20 14:20:16 Chyba raczej nie używałem jeszcze referencji, chodzi o dodanie argumentu funkcji "int& cos" ? @: PRzeczytałęm http://cpp0x.pl/kursy/Kurs-C++/Poziom-3/Przekazywanie-argumentow-funkcji-przez-referencje/356 i już wiem jak tego używać, pozostało mi pytanie jaki typ referencji powinienem przyjąc dla obiektu plik z klasy "std::fstream"? int main() { std::fstream plik( "liczby.txt", std::ios::out | std::ios::in ); }
bool sprawdz( int in, std::fstream & test ) { for( int p = 0; p < in; p++ ) { if( tekscik[ p ] == tekscik[ in ] ) return 1; } while( std::getline( test, str ) ) { found = str.find( tekscik[ in ] ); if( found == std::string::npos ) { return 1; break; } } return 0; }
Wszystko działa jak pętle while umieszczę jako komentarz, inaczej nic w pliku się nie zapisuję.(błąd leży na 100% w pętli while). @:Cały kod: #include <iostream> #include <ctime> #include <string> #include <fstream>
char tab[] = "987ABC"; std::string tekscik[ 10 ]; std::string str; int found; bool x;
void los( int index ); bool sprawdz( int in, std::fstream & heh );
int main() { std::fstream plik( "liczby.txt", std::ios::out | std::ios::in | std::ios::app ); srand( time( NULL ) ); for( int j = 1; j < 10; j++ ) { los( j ); x = sprawdz( j, plik ); while( x == true ) { tekscik[ j ].clear(); los( j ); x = sprawdz( j, plik ); } plik << j << ": " << tekscik[ j ] << "\n"; std::cout << j << ": los: " << tekscik[ j ] << std::endl; } plik.close(); return 0; }
bool sprawdz( int in, std::fstream & heh ) { for( int p = 0; p < in; p++ ) if( tekscik[ p ] == tekscik[ in ] ) return 1; while( std::getline( heh, str ) ) { found = str.find( tekscik[ in ] ); if( found == std::string::npos ) { return 1; break; } } return 0; }
void los( int index ) { for( int i = 1; i < 4; i++ ) tekscik[ index ] += tab[ rand() %( sizeof( tab ) - 1 ) ]; }
Plik się tworzy lecz nie zapisuje danych do pliku(moim zdaniem przyczyną jest pętla while w funkcji "sprawdź"). @Po długim badaniu kodu znalazłem, że kłopot leży w lini std::getline( heh, str ) Proszę o pomoc. |
|
mgrD Temat założony przez niniejszego użytkownika |
» 2014-01-20 15:07:23 @: Delete, zedytowałem poprzedni post. |
|
leon_w |
» 2014-01-20 23:00:11 Nigdzie nie widzę, żebyś nadawał jakąś wartość dla str. |
|
« 1 » 2 |