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

[C++] Wczytywanie z pliku tekstowego

VPS Starter Arubacloud
0 głosów
1,095 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ź 419 wizyt
0 głosów
1 odpowiedź 2,958 wizyt
0 głosów
3 odpowiedzi 1,200 wizyt

93,006 zapytań

141,974 odpowiedzi

321,255 komentarzy

62,348 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...