Cześć wszystkim!
Zacząłem naukę C++ i trafiłem na pierwsze schody. Robię ćwiczenie z filmiku:
Generalnie ćwiczę sobie tak, że następnego dnia zawsze robie sobie wszystko "z głowy" i wprowadzam swoje mini modyfikacje ale tutaj robiac wszystko tak samo krok w krok, nie mogę dojść o co chodzi.
Napisałem swój kod i program nie odczytuje mi treści odpowiedzi A. i B. (tylko i wyłącznie w pierwszym pytaniu) oraz podaje, że ostatnie pytanie to odpowiedź zła a poprawna jest odpowiedź "a" pomimo tego, że to właśnie poprawna odpowiedź.
Ostatecznie pobrałem pliki od autora zadania, sprawdzałem kod linijka po linijce a w końcu przekleiłem cały kod autora i zmieniłem jedynie nazwę pliku, który ma być odczytany na własny plik i problem dalej jest ten sam.. (Oczywiscie program autora z tym samym kodem tylko jego plikiem odpowiedzi działa poprawnie na moim komputerze).
Pliki z odpowiedziami również sprawdzałem, mają tyle samo wierszy i wszystko IMO się zgadza.
Załączam screeny i będę wdzięczny za wytłumaczenie w czym problem bo jeśli nie w kodzie to może mam źle zainstalowany progam? Wcześniej od czasu do czasu miałem małe błędy na które udawało mi się znaleźć rozwiązanie a które np. nie występowały na filmikach z tego kanału.
PS. Ćwicząc zapis do pliku miałem w sumie podobny problem: miałem dwie odpowiedzi (pierwszą i trzecią) zawierające albo "tekstA tekstB" albo np. "24 marca" i w momencie jak poprawnie zapisywała się linijka "tekst A tekst B" to linijka "24 marca" zapisywała się "marca" i odwrotnie. Kombinując i szukając rozwiązań czasem program też poprawnie "zbierał" odpowiedzi aż do pytania o "24 marca", które wyświetlał ale pomijał możliwość jej wpisania i dalej poprawnie wyświetlał kolejne pytanie.
Generalnie jakbym nie zapisal getline czy cin w obrębie tych dwóch liniej to albo program pomijał wpisywanie danych w następnym pytaniu albo zapisywał niepełne odpowiedzi z brakującym słowem albo pominiętą linijką itd.
Zarówno w 1 jak i 2 przypadku korzystam jedynie z getline a nie getch.
KOD:
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <algorithm>
#include <string>
using namespace std;
string temat, nick;
string tresc[5];
string odpA[5], odpB[5], odpC[5], odpD[5];
string poprawna[5];
string odpowiedz;
int punkty=0;
int main()
{
int nr_linii=1;
string linia;
int nr_pytania=0;
fstream plik;
plik.open("Test wiedzy.txt",ios::in);
if (plik.good()==false)
{
cout<<"Nie udalo sie otworzyc pliku!";
exit(0);
}
while(getline(plik,linia))
{
switch(nr_linii)
{
case 1: temat=linia; break;
case 2: nick=linia; break;
case 3: tresc[nr_pytania] = linia; break;
case 4: odpA[nr_pytania] = linia; break;
case 5: odpB[nr_pytania] = linia; break;
case 6: odpC[nr_pytania] = linia; break;
case 7: odpD[nr_pytania] = linia; break;
case 8: poprawna[nr_pytania] = linia; break;
}
if (nr_linii==8) {nr_linii=2; nr_pytania++;}
nr_linii++;
}
plik.close();
for (int i=0; i<=4; i++)
{
cout<<endl<<tresc[i]<<endl;
cout<<"A. "<<odpA[i]<<endl;
cout<<"B. "<<odpB[i]<<endl;
cout<<"C. "<<odpC[i]<<endl;
cout<<"D. "<<odpD[i]<<endl;
cout<<"Twoja odpowiedz: ";
cin>>odpowiedz;
transform(odpowiedz.begin(), odpowiedz.end(), odpowiedz.begin(), ::tolower);
if (odpowiedz==poprawna[i])
{
cout<<"Dobrze! Zdobywasz punkt!"<<endl;
punkty++;
}
else cout<<"Zle! Brak punktu! Poprawna odpowiedz: "<<poprawna[i]<<endl;
}
cout<<"Koniec quizu. Zdobyte punkty: "<<punkty;
return 0;
}