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

[PROBLEM] Odzczytywanie danych z pliku.

Ostatnio zmodyfikowano 2014-03-23 12:58
Autor Wiadomość
Merkury_Code
Temat założony przez niniejszego użytkownika
[PROBLEM] Odzczytywanie danych z pliku.
» 2014-03-23 12:34:36
Witam, napisalem program, ktory docelowo ma odczytywac dane z pliku. Plik wizytowka.txt ma 6 linijek tekstu a niestety wyswietla tylko pierwsze 3. Nie mam juz pomyslu co jest nie tak.
C/C++
#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

string imie[ 2 ], nazwisko[ 2 ];
int nr_tel[ 2 ];

int main()
{
    fstream plik;
    plik.open( "wizytowka.txt", ios::in );
   
    if( !plik.good() )
    {
        cout << "Nie ma takiego pliku!";
        exit( 0 );
    }
   
    string linia;
    int nr_linii = 1;
    int nr_pacjenta = 0;
   
    while( getline( plik, linia ) )
    {
        switch( nr_linii )
        {
        case 1: imie[ nr_pacjenta ] = linia; break;
        case 2: nazwisko[ nr_pacjenta ] = linia; break;
        case 3: nr_tel[ nr_pacjenta ] = atoi( linia.c_str() ); break;
        }
       
        if( nr_linii == 3 ) { nr_linii == 1; nr_pacjenta++; }
        else nr_linii++;
       
    }
   
    plik.close();
   
    for( int i = 0; i <= nr_pacjenta; i++ )
    {
        cout << imie[ i ] << endl;
        cout << nazwisko[ i ] << endl;
        cout << nr_tel[ i ] << endl;
    }
   
   
    return 0;
   
   
}
P-107062
OczkoSX
» 2014-03-23 12:38:05
Tam gdzie masz nr_linii++; to dodaj przed tym else ;) Ponieważ gdy dajesz kolejnego pacjenta to zaczyna od drugiej linii od razu. Numerację linii daj od zera
P-107063
Merkury_Code
Temat założony przez niniejszego użytkownika
» 2014-03-23 12:45:51
ok, z tym else masz racje, ale nr_linii, musi byc rowny 1 .Poza tym po dodaniu elsa, dalej nie dziala prawidlowo.
P-107064
OczkoSX
» 2014-03-23 12:49:00
Zmień tablice imion, nazwisk itp. na tą o indeksie 2. Tablica[1] przechowuje tylko jedną zmienną jaką jest tablica[0], a tablica[2] przechowuje tablica[0] i tablica[1]. Nie wiedziałem jak wytłumaczyć :D No i zobacz z numeracją linii od zera...

EDIT:: Chociaż jest dobrze z numeracją, sry :D
EDIT2:: if (nr_linii == 3) { nr_linii == 1; nr_pacjenta++; }, zamień na if (nr_linii == 3) { nr_linii = 1; nr_pacjenta++; }
P-107065
Merkury_Code
Temat założony przez niniejszego użytkownika
» 2014-03-23 12:51:20
No tak, tablice zostaly powiekszone, ale nadal nie dziala. Jakis pomysl ? Aktualizuje kod u gór.
P-107066
Merkury_Code
Temat założony przez niniejszego użytkownika
» 2014-03-23 12:57:32
dobra dziala, poprawny kod ( moze komus sie przyda)

C/C++
#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

string imie[ 2 ], nazwisko[ 2 ];
int nr_tel[ 2 ];

int main()
{
    fstream plik;
    plik.open( "wizytowka.txt", ios::in );
   
    if( !plik.good() )
    {
        cout << "Nie ma takiego pliku!";
        exit( 0 );
    }
   
    string linia;
    int nr_linii = 1;
    int nr_pacjenta = 0;
   
    while( getline( plik, linia ) )
    {
        switch( nr_linii )
        {
        case 1: imie[ nr_pacjenta ] = linia; break;
        case 2: nazwisko[ nr_pacjenta ] = linia; break;
        case 3: nr_tel[ nr_pacjenta ] = atoi( linia.c_str() ); break;
        }
       
        if( nr_linii == 3 ) { nr_linii = 1; nr_pacjenta++; }
        else nr_linii++;
       
    }
   
    plik.close();
   
    for( int i = 0; i <= nr_pacjenta - 1; i++ )
    {
        cout << imie[ i ] << endl;
        cout << nazwisko[ i ] << endl;
        cout << nr_tel[ i ] << endl;
    }
   
   
    return 0;
   
   
}
P-107067
OczkoSX
» 2014-03-23 12:58:19
Poprawny kod:
C/C++
#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
#include <conio.h>

using namespace std;

string imie[ 2 ], nazwisko[ 2 ];
int nr_tel[ 2 ];

int main()
{
    fstream plik;
    plik.open( "wizytowka.txt" );
   
    if( !plik.good() )
    {
        cout << "Nie ma takiego pliku!";
        exit( 0 );
    }
   
    string linia;
    int nr_linii = 0;
    int nr_pacjenta = 0;
   
    while( getline( plik, linia ) )
    {
        switch( nr_linii )
        {
        case 0: imie[ nr_pacjenta ] = linia; break;
        case 1: nazwisko[ nr_pacjenta ] = linia; break;
        case 2: nr_tel[ nr_pacjenta ] = atoi( linia.c_str() ); break;
        }
       
        if( nr_linii == 3 ) { nr_linii = 0; nr_pacjenta++; }
        else nr_linii++;
       
    }
   
    plik.close();
   
    for( int i = 0; i <= nr_pacjenta; i++ )
    {
        cout << imie[ i ] << endl;
        cout << nazwisko[ i ] << endl;
        cout << nr_tel[ i ] << endl;
    }
   
    getch();
   
    return 0;
}

Oj, nie zauważyłem że napisałeś
PS. Nie miałeś dołączonych wszystkich bibliotek. <conio.h> ja dodałem aby móc skorzystać z getch(), które zatrzymuje program do momentu naciśnięcia dowolnego przycisku
P-107068
« 1 »
  Strona 1 z 1