matematykaszkolna.pl
wlasna funkcja c++: dlaczego w stworzonej przeze mnie funkcji, program nie wczytuje danych z pliku? moj kod: #include <iostream> #include <cstdlib> #include <fstream> #include <algorithm> #include <string> using namespace std; quiz() { string save; int nrlinii=1, n=0, wynik=0; string temat, autor, odp[5]; string pytanie[5], A[5], B[5], C[5], D[5], poprawna[5]; fstream plik; plik.open("quiz.txt", ios:ut); if(plik.good() == false) { cout << "error!"; exit(0); } while(getline(plik,save)) { switch(nrlinii) { case 1: temat = save; break; case 2: autor = save; break; case 3: pytanie[n] = save; break; case 4: A[n] = save; break; case 5: B[n] = save; break; case 6: C[n] = save; break; case 7: D[n] = save; break; case 8: poprawna[n] = save; break; } if(nrlinii == 8) { nrlinii = 2; } nrlinii++; n++; } for(int i=0; i<=4; i++) { cout << endl << i+1 << ". " << pytanie[i]; cout << endl << "A. " << A[n]; cout << endl << "B. " << B[n]; cout << endl << "C. " << C[n]; cout << endl << "D. " << D[n]; cout << "\n\t\t\ttwoja odpowiedz: "; cin >> poprawna[i]; transform(poprawna[i].begin(),poprawna[i].end(),poprawna[i].begin(),::tolower); if(poprawna[i] == odp[i]) { cout << "Dobrze. Zdobywasz 1. punkt!"; wynik++; } else{ cout << "Zle. Poprawna odp: " << poprawna[i]; } } } int main() { cout << "\t\t\t\t\t\tQUIZ!\n"; quiz(); cout << "Brawo! Twoj wynik to: " ; return 0; }
20 cze 19:31
Dziadek Mróz: Definicja funkcji. Zamiast switch() użyj tablicy stringów lub vector'a i wczytuj po indeksie nr_linii. while(getline(plik, dane[nr_linii])) { std::cout << dane[nr_linii] << std::endl; nr_linii++; } Najlepiej pokaż plik quiz.txt to będziemy wiedzieć na jakich danych operujesz
20 cze 21:06
Dziadek Mróz: Albo stwórz strukturę struct Question { std::string odpowiedz; std::string pytanie; std::string odpowiedzi[4]; std::string poprawna; void load(const std::ifstream ifs); friend std::ifstream &operator >>(std::ifstream &ifs, Question &q); // metoda load i operator >> robią to samo ale innym sposobem }; void Question::load(const std::ifstream &ifs) { getline(ifs, this−>odpowiedz); getline(ifs, this−>pytanie); for (size_t ll = 0; ll < 4; ll++) { getline(ifs, this−>odpowiedzi[ll]); } getline(ifs, this−>poprawna); }
21 cze 20:24