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

Tworzenie bazy numerów bez powtórzeń

Ostatnio zmodyfikowano 2015-07-07 05:58
Autor Wiadomość
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.

C/C++
#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;
}
P-134377
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.
P-134378
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
P-134379
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?
P-134390
BadBullPL
» 2015-07-06 17:49:50
Dlaczego?
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
P-134393
michal11
» 2015-07-06 18:28:37
Nie możesz a nie powinno się to chyba jest różnica, prawda ?
P-134395
pekfos
» 2015-07-06 18:50:00
'Nie należy' to nie znaczy, że się nie da, czy nie można.

C/C++
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.
P-134398
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
P-134399
« 1 » 2
  Strona 1 z 2 Następna strona