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

Mam problem z wczytaniem pliku w języku C++

Object Storage Arubacloud
0 głosów
254 wizyt
pytanie zadane 19 marca 2017 w C i C++ przez michal12334 Obywatel (1,510 p.)
Po uruchomieniu programu wyskakuje mi komunikat program przestał działać. Kiedy usunę większość zawartości z pliku tekstowego kod działa ale nie wypisuję tych linijek które bym chciał i nie mogę znaleźć błędu w kodzie. Oto kod:

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <algorithm>
#include <string>

using namespace std;

string temat, nick, pytania[5], odpA[5], odpB[5], odpC[5], odpD[5], odpP[5], odpU[5];
int nrPyt = 0;
int punkty;

int main()
{
    fstream plik;
    plik.open("quiz.txt", ios::in);

    if (plik.good()==false) {
        cout << "Nie mozna odnalezc pliku!";
        exit(0);
    }

    string linia;
    int nrLin = 1;
    while(getline(plik, linia)) {
        switch (nrLin) {
            case 1: temat = linia; break;
            case 2: nick = linia; break;
            case 3: pytania[nrPyt] = linia; break;
            case 4: odpA[nrPyt] = linia; break;
            case 5: odpB[nrPyt] = linia; break;
            case 6: odpC[nrPyt] = linia; break;
            case 7: odpD[nrPyt] = linia; break;
            case 8: odpP[nrPyt] = linia; break;
        }

        if (nrLin==8) {
            nrLin = 2;
        }
        nrLin++;
        nrPyt++;
    }

    cout << temat << endl;
    cout << nick << endl;

    for (int i = 0; i<=nrPyt; i++) {
        cout << pytania[i] << endl << odpA[i] << endl << odpB[i] << endl << odpC[i] << endl << odpD[i] << endl;
        cin >> odpU[i];

        transform(odpU[i].begin(), odpU[i].end(), odpU[1].begin(), ::tolower);

        if (odpU[i]==odpP[i]) {
            punkty++;
        }
    }

    cout << endl << "Uzysakles" << punkty << "punktow";

    return 0;
}

 

Oto zawartość pliku tekstowego:

informatyka
Michal
1. Ktora karta graficzna z podanych jest najwydajniejsza?
a) GTX 1080Ti
b) GTX 980Ti
c) GTX 950
d)RX 470
a
2. Jaka jednostka okresla sie miare wydajnosci CPU?
a) N
b) V
c) GHz
d) kWh
c
3. Jaka firma produkuje telefony z serii Galaxy?
a) apple
b) samsung
c) sony
d) HTC
b
4. Ktora z podanych jest nazwa przelocznika uzywanego w klawiaturach mechanicznych?
a) i7-7700K
b) r9 FuryX
c) z170
d) mx Red
d
5. Kto jest uwazany za tworce jezyka C?
a) Bill Gates
b) Steve Jobs
c) Dennis Ritchie
d) Paul Baran
c
komentarz 19 marca 2017 przez Undisputed Gaduła (3,040 p.)
Wklej kod w odpowiednie miejsce.

Pierwsze co da się zauważyć to nie zerujesz na początku "punkty"
komentarz 19 marca 2017 przez Antero00 Gaduła (3,670 p.)

Błąd w funkcji

transform

Zmień również warunek w funkcji for przy wypisywaniu.

Kod daj z znacznik C/C++, bo ciężko się czyta.

1 odpowiedź

+1 głos
odpowiedź 19 marca 2017 przez tangarr Mędrzec (154,860 p.)
wybrane 12 maja 2017 przez michal12334
 
Najlepsza
Tu masz błąd:

nrPyt++;
komentarz 19 marca 2017 przez michal12334 Obywatel (1,510 p.)
A na czym polega ten błąd?
komentarz 19 marca 2017 przez tangarr Mędrzec (154,860 p.)
Myślałem, że sam pisałeś ten kod i się domyślisz o co chodzi po wskazaniu błędu.
Z tego co widzę zmienna nrPyt oznacza numer pytania które wczytujesz, jednak w twoim kodzie zmienna ta jest zwiększana po wczytaniu każdej linii z pliku. Powinieneś ją zwiększać po wczytaniu wszystkich danych dotyczących jednego pytania. Jednak u ciebie zmienna bardzo szybko przekracza rozmiar zdefiniowanych tablic.
komentarz 21 marca 2017 przez michal12334 Obywatel (1,510 p.)
Dziękuję za podpowiedź

Podobne pytania

0 głosów
1 odpowiedź 313 wizyt
0 głosów
3 odpowiedzi 541 wizyt
pytanie zadane 8 listopada 2019 w C i C++ przez Mała Mi Początkujący (270 p.)
0 głosów
4 odpowiedzi 346 wizyt

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!

...