WardenOFTime Geschrieben 27. Februar 2005 Geschrieben 27. Februar 2005 Hi also ich da ein Problem und hoffedas mir irgendwer hier (möglichst schnell) helfen kann: Ich möchte ein Quiz programmieren (C++), dass Fragen aus der Datei questions.txt ausliest, und dann die Antworten in einer anderen Datei speichert (das hab ich schon hingekriegt), nur mit dem Fragenteil hab ich probleme,im wesentlichen 2: 1. Wie kann ich einen ganzen Satz aus der Datei lesen,nicht nur das erste Wort? 2. Wie bring ich das Prog dazu die zweite Frage aus der 2. Zeile der Datei zu lesenund die dritte aus der dritten zeile usw.? Hier mal mein total chaotischer Code #include <fstream> #include <iostream> #include <iostream> #include <string.h> using namespace std; int main() { char frage[1024]; char antwort[30]; int zaehler; char afilename[20], qfilename[20]; cout << "Enter File: "; cin >> qfilename; cout << "Gruppennummer"; cin >> afilename; for (zaehler=1; zaehler<=2; zaehler++) { ifstream questions(qfilename); questions.open(qfilename, ios::in); questions.getline(frage, 1024); questions.close; cout << frage; //da gibt erirgendwie nix aus, obwohl ich doch //eigentlich vorher mit getline frage geholt hab, oder? :confused: cin >> antwort; //hier gibt der nutzer die antwort ein ofstream answers(afilename, ios::app); answers << antwort << '\n'; //diese wird in einer datei gespeichert //dabei bekommt jede Antwort eine neue //Zeile } return 0; } Plz help anyone! :confused: Danke Zitieren
robotto7831a Geschrieben 27. Februar 2005 Geschrieben 27. Februar 2005 Hallo, beim Einlesen vielleicht den Satzzeiger mal auf Anfang stellen. questions.ssekg(0L, ios::beg); [/code] Die zweite Frage versteh ich nicht. Warum baust Du kein while eof anstatt einer for Schleife ein. [code] while (!questions.eof()) { .... } Frank Zitieren
WardenOFTime Geschrieben 27. Februar 2005 Autor Geschrieben 27. Februar 2005 Danke erstmal, aber ich mein das noch ien bisschen anders: Bsp: Die Datei questions.txt enthält folgendes Das ist die erste Frage? Und hier kommt die zweite Frage? Dann soll mein Prog zwei Dinge tun: 1. Die erste Frage komplett, also den ganzen Satz anzeigen (derzeit zeigt es gar nichts an, davor hat es nur das erste Wort,hier :"Das" angezeigt, soll aber "Das ist die erste Frage?" anzeigen! 2. Wenn der User diese beantwortet hat soll das Program die zweite Frage aus der datei questions.txt einlesen und (ebenfalls den kompletten Satz) anzeigen, damit der User zur Beantwortung schreitenkann. Bitte helft mir! Ich hab nicht mehr viel Zeit. Danke im voraus Warden Zitieren
robotto7831a Geschrieben 27. Februar 2005 Geschrieben 27. Februar 2005 Warum machst Du des nicht so wie ich es geschrieben habe? char frage[1024]; char antwort[30]; int zaehler; char afilename[20], qfilename[20]; cout << "Enter File: "; cin >> qfilename; cout << "Gruppennummer"; cin >> afilename; ifstream questions; ofstream answers; questions.open(qfilename, ios_base::in); answers.open("answer.txt", ios_base::app); while (!questions.eof()) { questions.getline(frage, 1024); cout << frage << endl; fflush(stdin); cin.getline(antwort, 1024); answers << antwort << endl;; } questions.close(); answers.close(); [/code] Frank Zitieren
WardenOFTime Geschrieben 27. Februar 2005 Autor Geschrieben 27. Februar 2005 Estmal wieder t immerhin schon (hab ein bisschen was geändert, weil sonst 26 fehler kamen) Hier der Aktuelle Code: #include <fstream.h> #include <iostream.h> #include <string.h> int main() { char frage[1024]; char antwort[30]; int zaehler; char afilename[20], qfilename[20]; cout << "Enter File: "; cin >> qfilename; cout << "Gruppennummer"; cin >> afilename; ifstream questions; ofstream answers; questions.open(qfilename, ios::in); answers.open(afilename, ios::app); while (!questions.eof()) { questions.getline(frage, 1024); cout << frage << endl; //fflush(stdin); //den befehl hab ich ausgeklammert, denn er laeuft irgendwie nicht cin.getline(antwort, 1024); answers << antwort << '\n' << endl;; } questions.close(); answers.close(); return 0; } Ein Problem hab ich allerdings noch immer: Wenn man das Programm ausführt, dann zeigt es nach den Eingaben die ersten beiden Fragen auf einmal an und erst dann geht es regelmäßi, also ausgabe frage 3, eingabe antwort3, ausgabe frage4, eingabe antwort 4usw. Abermals Danke im voraus Zitieren
robotto7831a Geschrieben 27. Februar 2005 Geschrieben 27. Februar 2005 Was meinst Du was fflush(stdin) macht? Das leert den Eingabepuffer. In welcher Umgebung programmierst Du denn? Der Befehl endl macht ein \n. Frank Zitieren
WardenOFTime Geschrieben 28. Februar 2005 Autor Geschrieben 28. Februar 2005 Hm, das hab ich schon kapiert, wegen fflush(stdin): ich hatte nur #include <stdio.h> vergessen ... :hells: Und ich hab wieder eine Frage: Wie muss ich den Code ändern, damit er statt 1 Zeile 5 Zeilen anzeigt? Ich meine das etwa so: ------------------------------------------------------------------- Ausgabe: 1.Who is Condoleezza Rice? a) Financial Advisor Secretary of State c) First Lady d) Chairman of the FBI Eingabe Antwort 1 Ausgabe: 2. Frage? a) Antwortmöglichkeit Antwortmöglichkeit c) Antwortmöglichkeit d) Antwortmöglichkeit Eingabe Antwort 2 ...usw... ------------------------------------------------------------------ Bitte wieder so schnell wie möglich helfenund ebenfalls wieder vielen Dank im voraus! Zitieren
geloescht_Newlukai Geschrieben 28. Februar 2005 Geschrieben 28. Februar 2005 Vielleicht indem Du statt einer Zeile 5 Zeilen ausliest? Zitieren
robotto7831a Geschrieben 28. Februar 2005 Geschrieben 28. Februar 2005 Im Prinzip questions.getline(frage, 1024); mehrmals ausführen. Frank Zitieren
WardenOFTime Geschrieben 28. Februar 2005 Autor Geschrieben 28. Februar 2005 Noch ein Problem: Ich möchte die Antworten ja überprüfen, also kann mir jemand den code so ändern, dass er die eingegebenen antworten mit den richtigen die in einer datei(z.B correct.txt) stehen vergleicht, wenn richtig die variable (int punkte) um eins erhöht(das schaff ich selber) und am Ende statt die antworten in eine datei zu speichern, die erreichte punktzahl(=anzahl der richtigen) in die antwortsdatei schreibt? Das Problem was ich hierbei nicht verstehe its, wie man zwei dateien gleichzeitig öffnet (z.B. questions.txt um die fragen anzuzeigen und correct.txt um die antworten vergleichen zu können) Danke Zitieren
carstenj Geschrieben 28. Februar 2005 Geschrieben 28. Februar 2005 Hallo, fflush(stdin); erzeugt undefiniertes Verhalten: http://www.c-plusplus.de/forum/viewtopic-var-t-is-39349.html Der Befehl endl macht ein \n. ...und flusht den Buffer. Zitieren
WardenOFTime Geschrieben 28. Februar 2005 Autor Geschrieben 28. Februar 2005 bei mehrmals (5mal )ausführen zeigt er mir die ganze datei an (alle 20) Zitieren
robotto7831a Geschrieben 28. Februar 2005 Geschrieben 28. Februar 2005 Ich möchte die Antworten ja überprüfen, also kann mir jemand den code so ändern, dass er die eingegebenen antworten mit den richtigen die in einer datei(z.B correct.txt) stehen vergleicht, wenn richtig die variable (int punkte) um eins erhöht(das schaff ich selber) und am Ende statt die antworten in eine datei zu speichern, die erreichte punktzahl(=anzahl der richtigen) in die antwortsdatei schreibt? Das Problem was ich hierbei nicht verstehe its, wie man zwei dateien gleichzeitig öffnet (z.B. questions.txt um die fragen anzuzeigen und correct.txt um die antworten vergleichen zu können) Du hast doch schon zwei Dateien offen. Questions und Answers. Das ist doch immer das gleiche Prinzip. Wir sprechen hier von einfachsten Algorythmen in C bzw. C++. Hier wird dir bestimmt keiner den Code vorbeten. Bei konkreten Problem wird geholfen aber keiner schreibt dir hier dein Programm fertig. Frank Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.