• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[C++] Wczytywanie z pliku tekstowego

Object Storage Arubacloud
0 głosów
1,004 wizyt
pytanie zadane 24 lutego 2017 w C i C++ przez kistel66 Początkujący (370 p.)

Program nie odnajduje mi pliku tekstowego.

#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;
short t1 = 1;
//---------------------------------------------------------------------------
long long t2 = 0;
double t3 = 0;

void wyswietl()
{
    cout << t1 << endl;
    cout << t2 << endl;
    cout << t3 << endl;
}

int main()
{
    string linia;
    fstream plik;
    plik.clear();
    plik.open("C:\\zmienne.txt", ios::in);
    if(!plik.good())  cout << "kapota"<< endl;
    else
    {
        cout << "ZAWARTOSC" << endl << endl;
        while (!plik.eof()) //pokazuje zawartosc pliku txt;
        {
            getline(plik,linia);
            cout << linia <<endl;
        }

        cout << endl << endl << "PRZED WCZYTANIEM " << endl << endl;
        wyswietl(); //pokazuje domyslne wartosci
        cout << endl << endl << "PO WCZYTANIU" << endl << endl;
        int nr_linii = 1;
        if(!plik.good())  cout << "nie udalo sie"<<endl;
        else
        {
            while (getline(plik,linia))
            {
                switch (nr_linii)
                {
                case 1:
                    t1 = atoi(linia.c_str());
                    break;
                case 2:
                    t2 = atoi(linia.c_str());
                    break;
                case 3:
                    t3 = atoi(linia.c_str());
                    break;
                }
                nr_linii++;
            }
              wyswietl(); //ma pokazywac wartosci po wczytaniu
        }

        plik.close();

        return 0;
    }
}

A plik na dysku C jest: 

 

Jakie jest wyjście?

 

Co może być przyczyną, że program poprawnie odczytuje zawartość pliku, ale gdy ma przypisać wartości - nie odnajduje go.

3 odpowiedzi

+1 głos
odpowiedź 24 lutego 2017 przez criss Mędrzec (172,590 p.)
wybrane 24 lutego 2017 przez kistel66
 
Najlepsza

Bo już raz wczytałeś plik(cały) i została ustawiona flaga eof. .good() zwraca false jeśli jedna (lub więcej) z flag jest ustawiona.

Z doumentacji std::ios::good (fstream dziedziczy po ios):

Returns true if none of the stream's error state flags (eofbit, failbit and badbit) is set.

To powinno pomóc:

plik.clear(); // czyści flagi
plik.seekg(0, ios::beg); // ustawia pozycje znowu na początek

(przed ponownym wczytywaniem)

+1 głos
odpowiedź 24 lutego 2017 przez Rout Bywalec (2,350 p.)
Wczytujesz plik tylko do odczytu zmień to:plik.open("C:\\zmienne.txt", ios::in); na to: plik.open( "C:\\zmienne.txt", std::ios::in | std::ios::out );

 

Nie piszę w c++ ale myślę że to rozwiąże twój problem
komentarz 24 lutego 2017 przez criss Mędrzec (172,590 p.)

Dlaczego uważasz, że wczytywanie pliku w trybie do odczytu jest problemem? :P

komentarz 24 lutego 2017 przez Rout Bywalec (2,350 p.)

ios::in    (input - wejście/odczyt) Zezwolenie na odczytywanie danych z pliku.
ios::out    (output - wyjście/zapis) Zezwolenie na zapisywanie danych do pliku.

To mnie ukierunkowało na taką odpowiedź ponieważ problem był z zapisem a kolega użył tylko odczyt a chciał zapisać i wtedy generował się błąd, dlatego napisałem że nie jestem pewien czy to rozwiąże problem

+1 głos
odpowiedź 24 lutego 2017 przez Caspariano Użytkownik (760 p.)
1.Otwierasz plik i w pierwszej pętli while wyświetlasz go całego.
2.Wskaźnik który wskazuje aktualnie odczytywaną linie znajduje się na końcu pliku.
3.W następnej pętli (tej która edytuje wartości) próbujesz ponownie odczytać zawartość pliku od początku.
Albo wczytaj w pierwszej pętli wartości do programu i potem wykonaj z nimi działanie, albo poszukaj funkcji która przestawia wskaźnik aktualnie odczytywanej linii.

Podobne pytania

0 głosów
1 odpowiedź 384 wizyt
0 głosów
1 odpowiedź 2,839 wizyt
0 głosów
3 odpowiedzi 901 wizyt

92,565 zapytań

141,416 odpowiedzi

319,596 komentarzy

61,948 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...