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

Problem z wczytywaniem pliku

Object Storage Arubacloud
0 głosów
152 wizyt
pytanie zadane 27 listopada 2015 w C i C++ przez Tymek Baran Użytkownik (520 p.)

Witam

Problem polega na tym że jak chcę wczytać wynik to zostaje on wyświetlony ale zostaje do niego dopisane zero.

#include <iostream>
#include <conio.h>
#include <time.h>
#include <fstream>
#include <cstdlib>

using namespace std;

int main()
{
    fstream plik;
    int wybierz;
    int liczby[100];

    cout << "Zgadnij liczbe" << endl;
    cout << "\n1. Graj" << endl;
    cout << "2. Wyniki" << endl;
    cout << "3. Wyjscie" << endl;

    cin >> wybierz;

    switch(wybierz)
    {
    case 1:
        {
            system("cls");
            int losowa;
            srand(time(NULL));
            losowa = rand()%100+1;

            int liczba, ile_prob = 0;

            while(liczba != losowa)
            {
                ile_prob++;

                cout << "Podaj liczbe:";
                cin >> liczba;

                if(liczba == losowa)
                {
                    cout << "Wygrales za " << ile_prob << " razem" << endl;

                    plik.open("wyniki.txt", ios::out | ios::app);
                    plik << ile_prob << endl;
                    plik.close();

                }
                else if(liczba < losowa)
                {
                    cout << "To za malo" << endl;
                }
                else if(liczba > losowa)
                {
                    cout << "To za duzo" << endl;
                }

            }
        }
        break;
    case 2:
        {
            system("cls");
            int licznik = 0;
            string linia;
            plik.open("wyniki.txt", ios::in);

            if(!plik.good())
            {
                cout << "Nie znaleziono pliku!" << endl;
            }

            while(!plik.eof())
            {
                getline(plik, linia);
                liczby[licznik] = atoi(linia.c_str());
                licznik++;
            }
            plik.close();

            cout << "Wyniki" << endl;
            for(int i = 0; i < licznik; i++)
            {
                cout << liczby[i] << endl;
            }
        }
        break;
    case 3:
        {
            exit(0);
        }

    }
    return 0;
}

 

3 odpowiedzi

+1 głos
odpowiedź 27 listopada 2015 przez Radfler VIP (101,030 p.)
wybrane 27 listopada 2015 przez Tymek Baran
 
Najlepsza

W case 2 spróbuj może takiej pętli:

while(getline(plik, linia)) {
  liczby[licznik] = atoi(linia.c_str());
  licznik++;
}
komentarz 27 listopada 2015 przez Tymek Baran Użytkownik (520 p.)
Dzięki wielkie
+1 głos
odpowiedź 27 listopada 2015 przez niezalogowany
Nie korzystaj z while(!plil.eof()) tylko z while(getline(plik,linia)). Metoda eof zwraca true kiedy napotka koniec pliku. Czyli odczyta ostatnią linie i jeszcze jedną która nie istnieje więc będzie 0 i dopiero wtedy zwróci true.
0 głosów
odpowiedź 27 listopada 2015 przez Sedi Stary wyjadacz (10,200 p.)
Tak szybkim rzutem oka:

for(int i = 0; i < licznik; i++)

            {

                cout << liczby[i] << endl;

            }

Tablice numerowane są od zera, natomiast linie w plikach od 1. Może zacznij nie od 0 ?:)

Pozdrawiam :)

Podobne pytania

0 głosów
1 odpowiedź 8,922 wizyt
0 głosów
2 odpowiedzi 2,217 wizyt
pytanie zadane 1 lutego 2016 w Rozwój zawodowy, nauka, praca przez Pawel9922 Nowicjusz (160 p.)
0 głosów
1 odpowiedź 360 wizyt
pytanie zadane 18 grudnia 2015 w C i C++ przez sh1nen Obywatel (1,570 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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!

...