Tworzenie bazy numerów bez powtórzeń
Ostatnio zmodyfikowano 2015-07-07 05:58
Feiro Temat założony przez niniejszego użytkownika |
Tworzenie bazy numerów bez powtórzeń » 2015-07-06 12:31:07 Witam. Założenie jest jedno: Mam stworzyć program który do pliku tekstowego będzie zapisywać wprowadzone przeze mnie numery telefonów komórkowych w formacie "123456789" lecz bez powtórzeń czyli wprowadzam numer, program za pomocą pętli while eof sczytuje z pliku czy podany numer już się kiedyś powtórzył, jeśli tak to zmienną "a" powiększa o jeden. Na końcu programu warunek if zapisuje do pliku tekstowego mój numer jeśli a<=0. No i tak to wymyśliłem i napisałem tylko mam problem ponieważ nie mam pojęcia co może być z tym nie tak. Zwracam się do Was z uprzejmą prośbą o rozwiązanie mojego problemu. #include <iostream> #include<fstream> #include<string> #include<cstdlib>
using namespace std;
int main() { int a = 0; string numer; fstream plik1; plik1.open( "numery.txt", ios::in | ios::out | ios::app ); cout << "Podaj numer telefonu do wpisania" << endl; for( int c = 0; c <= 10000; c++ ) { cin >> numer; while( !plik1.eof() ) { string napis; getline( plik1, napis ); if( napis == numer ) { a = a + 1; } } cout << "Numer zostal wpisany juz " << a << " razy!" << endl; if( a <= 0 ) { plik1 << numer << endl; } } plik1.close(); system( "pause" ); return 0; }
|
|
michal11 |
» 2015-07-06 13:40:06 A co ci nie działa ? while( !plik1.eof() ) . To zamień na while( getline( plik1, napis ) ) albo nawet while( plik1 >> napis ) jeżeli dobrze rozumiem jak wygląda twój plik. Zamiast inta ustawiaj sobie boola jako flagę czy znaleziono numer czy nie, szczególnie, że ma to być baz numerów bez powtórzeń czyli twoje a może przyjąć jedynie wartości 0 lub 1. Jeżeli znaleziono to nie ma sensu dalsze sprawdzania, w ife daj break. |
|
BadBullPL |
» 2015-07-06 14:06:37 Gdy robisz tak: fstream plik1; to nie możesz jednocześnie otwierać pliku w trybie do odczytu i do zapisu |
|
pekfos |
» 2015-07-06 17:35:57 Gdy robisz tak: fstream plik1; to nie możesz jednocześnie otwierać pliku w trybie do odczytu i do zapisu |
Dlaczego? |
|
BadBullPL |
» 2015-07-06 17:49:50 Kiedyś też szukałem sposobu na jednoczesny odczyt i zapis pliku i znalazłem pewien temat i tam DejaVu napisał że nie można. Ale dlaczego to nie wiem |
|
michal11 |
» 2015-07-06 18:28:37 Nie możesz a nie powinno się to chyba jest różnica, prawda ? |
|
pekfos |
» 2015-07-06 18:50:00 'Nie należy' to nie znaczy, że się nie da, czy nie można. plik1.seekg( 0 );
while( !plik1.eof() ) { string napis; getline( plik1, napis ); if( napis == numer ) { a = a + 1; } }
plik1.clear(); cout << "Numer zostal wpisany juz " << a << " razy!" << endl; if( a <= 0 ) { plik1.seekp( 0, ios::end ); plik1 << numer << endl; } Bezsensownie działający licznik sam sobie popraw. |
|
libed |
» 2015-07-06 20:00:46 Wczytywanie i mielenie całego pliku po każdym dodaniu numeru to nie jest najlepszy pomysł. std::unordered_map |
|
« 1 » 2 |