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

problem z wczytaniem z pliku tekstowego do

Object Storage Arubacloud
+5 głosów
337 wizyt
pytanie zadane 6 listopada 2017 w C i C++ przez Cacek Nowicjusz (210 p.)

Witam,

Z uwagi, że jest to mój pierwszy post chciałbym się przedstawić. Mam na imię Łukasz i interesuje się programowaniem od 1 miesiąca. Po przerobieniu 7 odcinków kursu C++ postanowiłem stworzyć swój pierwszy, autorski program. Padło na program odpytujący ze słówek z j. angielskiego, które będą pobierane z pliku tekstowego. Plik tekstowy będzie miał strukturę: 

widelec (słówko PL)

fork (słówko Ang.) 

krzesło (słówko PL)

chair (słówko Ang.)

itd.

Teraz chciałbym, żeby program wczytał i wyświetlał w konsoli słówko polskie, ja wprowadzam jego odpowiednik z j. angielski. Program dalej dokonuje porównania, czy odpowiedź jest poprawna. Jak tak, otrzymuje stosowny komunikat, jak nie to program komunikuje błędną odpowiedź i podaje poprawne słówko angielskie.

Poniżej zamieszczam kod, który się kompiluje, ale są w nim dwa problemy:

1. Pytania i odpowiedzi nie są wczytywane linijka po linijce do odpowiednich tablic.

2. Nie następuje poprawne porównanie odpowiedzi z wartościami jakie powinny być zaczytane z pliku tekstowego.

Spędziłem 2h na analizie, co poszło źle, ale bez skutecznie. Wciąż jestem w tym samym miejscu. Będę wdzięczny za pomoc lub info. co jest napisane źle.

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

using namespace std;
string ang[5], pl[5], poprawna[5];
string odpowiedz;

int main()
{

    fstream plik;
    plik.open("slowka.txt", ios::in);

    if(plik.good()==false)
    {
        cout<<"Nie udalo sie otworzyc pliku!";
        exit(0);
    }

    int nr_linii=0;
    string linia;

    while(getline(plik,linia))
    {
        switch(nr_linii)
        {
            case 1: pl[nr_linii] = linia;        break;
            case 2: ang[nr_linii] = linia;       break;
        }

        if(nr_linii==2) {nr_linii=1;}
        nr_linii++;
    }
    plik.close();

    for(int j=0; j<=4; j++){

    {
        cout<< pl[j] <<endl;
        cout <<"Twoja odpowiedz: " << endl;
        cin >> odpowiedz;
    }

        if(ang[j]==odpowiedz){cout << "Dobrze!" << endl;}
        else{cout << "Zle, brak punktu! Poprawna odpowiedz to: " << ang[j] << endl;}
    }
    cout<< "Koniec quizu";
    return 0;
}


 

 

komentarz 6 listopada 2017 przez Patrycjerz Mędrzec (192,320 p.)

Może pierwszy post, ale jaka jakość. Przedstawiłeś się, ładnie opisałeś problem, wrzuciłeś kod w specjalny bloczek… kulturka pełną gębą smiley

komentarz 6 listopada 2017 przez draghan VIP (106,230 p.)

Popieram Patrycjerza, masz moją łapkę. yes Witamy na Forum. smiley

3 odpowiedzi

0 głosów
odpowiedź 6 listopada 2017 przez kuba1176 Początkujący (340 p.)
W linii 35 pod nr_linii przypisz 0.

Pod koniec kodu pod pętlą for masz strasznie dużo dziwnych klamer.
0 głosów
odpowiedź 6 listopada 2017 przez Patrycjerz Mędrzec (192,320 p.)
Źle zliczasz numer linii. Powinien się on zaczynać od 1, nie od 0. Po drugie po przypisaniu do licznika jedynki od razu go inkrementujesz i potem zawsze numer linii jest dwójką. Dodaj else do fragmentu kodu z nr_linii++ lub inkrementuj licznik cały czas, licząc jedynie modulo z 2.
0 głosów
odpowiedź 7 listopada 2017 przez Cacek Nowicjusz (210 p.)

Dzięki za miłe przywitanie i podpowiedzi.

Finalnie, 2 roboczo/godziny później problem rozwiązany:

- poprawiłem wartość początkową nr_linii na 1,

- potraktowałem każdą parę wyrazów jako oddzielne pytanie i dodałem zmienną nr_pytania, która się zmienia +1 po przekroczeniu nr_linii==2. Teraz wszystko już się ładnie zapisuje do tablic.

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

using namespace std;
string ang[5], pl[5], poprawna[5];
string odpowiedz;

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

    if(plik.good()==false)
    {
        cout<<"Nie udalo sie otworzyc pliku!";
        exit(0);
    }

    int nr_linii=1;
    int nr_pytania=0;
    string linia;

    while(getline(plik,linia))
    {
        switch(nr_linii)
        {
            case 1: pl[nr_pytania] = linia;        break;
            case 2: ang[nr_pytania] = linia;       break;
        }
        if(nr_linii==2) {nr_linii=0; nr_pytania++;}
        nr_linii++;
    }
    plik.close();

    for(int j=0; j<=4; j++){

    {
        cout<< pl[j] <<endl;
        cout <<"Twoja odpowiedz: " << endl;
        cin >> odpowiedz;
    }

        if(ang[j]==odpowiedz){cout << "Dobrze!" << endl<<endl;}
        else{cout << "Zle, brak punktu! Poprawna odpowiedz to: " << ang[j] << endl << endl;}
    }
    cout<< "Koniec quizu";
    return 0;
}

W sumie wyszła lekko zmodyfikowana kalka kurs #7 C++ zadanie "Quiz".

Podobne pytania

+1 głos
2 odpowiedzi 378 wizyt
0 głosów
1 odpowiedź 109 wizyt
pytanie zadane 1 lutego 2017 w C i C++ przez Don Corleone Obywatel (1,210 p.)
0 głosów
1 odpowiedź 326 wizyt
pytanie zadane 20 kwietnia 2016 w C i C++ przez DragonCoder Nałogowiec (36,500 p.)

92,570 zapytań

141,422 odpowiedzi

319,644 komentarzy

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

...