Du kannst C-Strings (also char Arrays) nicht mit == vergleichen. Damit vergleichst du nur ihre Startadresse im Speicher. Um den Inhalt zu vergleichen musst du strcmp() verwenden.
Da du aber eh C++ benutzt kannst du auch direkt einen std::string statt einem char Array verwenden. Der std::string bringt auch einen == Operator mit so dass du diese direkt per == vergleichen kannst.
#include <iostream> usingnamespace std; // Hauptprogramm int main (void) { int Leer = 0; int Punkte = 0; int Falsch = 0; string Frage1 = "Das wievielte Quiz ist das?"; string antwort1 = ""; string richtig1 = "das erste"; cout << "Guten Tag" << endl; cout << "Willkommen zum 1. Quiz" << endl; cout << "Frage1:" << endl; cout << Frage1 << endl; cin >> antwort1; if (antwort1.compare(richtig1)==0) { cout << "Richtig" << endl; Punkte += 1; cin >> Leer; } else { cout << "Falsch" << endl; Falsch += 1; cin >> Leer; }
cin >> Leer; }
-- "Zwei Dinge sind unendlich: Das Universum und die menschliche Dummheit. Aber beim Universum bin ich mir nicht ganz sicher." - Albert Einstein www.blue-xenon.de.vu
Oder auch so (obwohl mit string viel einfacher wäre):
C++:
#include <iostream> #include <algorithm>
usingnamespace std;
int main(void){ int Leer=0; int Punkte=0; int Falsch=0; char Frage1[]="Das wievielte Quiz ist das?"; char antwort1 [256]; char richtig1[] = "das erste";
Naja ... du kannst zwei char array so nicht vergleichen ... müsstest du mit strcmp machen ... oder du nimmst einfach direkt std::string ... aja und das it den Fragen ... nimm am einfachsten sowas wie std::vector oder std::map ...
int main () { unsignedshort match_points = 0; std::vector< std::pair<std::string, std::string> > vec_questions;
vec_questions.push_back(std::make_pair("Das wievielte Quiz ist das", "Erste")); vec_questions.push_back(std::make_pair("Wie heißt das neue Windows", "Vista")); // usw ... kannst du ja auch aus einer Datei auslesen ...
Danke für die schnelle antwort. Das erste wird immer noch sofort beendet das 2 geht, verstehen tu ichs trotzdem nicht und beim dritten kenn ich mich gar nicht mehr aus. trotzdem danke ich machs jetzt mit dem 2.
ja hab ich dir doch geschrieben ... pm ... aber ich erklär dir mal meine variante ... hat einiges schon drin was du evt. später brauchen wirst
C++:
#include <iostream> // für std::cout und std::cin #include <string> // für std::string und std::getline #include <vector> // für std::vector
int main () { unsignedshort match_points = 0; // halt wie viele richtig waren ... std::vector< std::pair<std::string, std::string> > vec_questions; // das ist sowas wie einen array von strings ... nur das das ein DYNAMISCHER Array von string-paaren ist ... d.h. die Lösung und die Frage bilden ein std::pair ...
vec_questions.push_back(std::make_pair("Das wievielte Quiz ist das", "Erste")); // mit push_back fügst du dem vector ein element hinzu ... und std::make_pair macht dir halt aus deinen beiden strings ein std::pair ... vec_questions.push_back(std::make_pair("Wie heißt das neue Windows", "Vista")); // usw ... kannst du ja auch aus einer Datei auslesen ...
for (size_t question = 0; question < vec_questions.size(); ++question) // vec_questions.size() gibt dir halt die anzahl an elementen im vector an ... d.h. wie viele Lösung-Frage-Paare du hast ... und die gehen wir jetzt einzellnt durch ... { std::cout << (question + 1) << ". " << vec_questions[question].first << "?" << std::endl; // weil question bei 0 und nicht bei 1 anfängt(hat was mit dem array zu tun) wollen wirs für den benutzer aber richten ... und vec_questions wird hier halt wie nen array behandelt ... und first steht für das erste element des std::pairs ... also deine Frage ... std::string string_answer; // hier soll die antwort rein ... std::getline(std::cin, string_answer); // mit getline holen wir uns die ganze Zeile auch wenn nen Leerzeichen odg kommt ... if (vec_questions[question].second == string_answer) // halt unsere vorgegebene Antwort mit der eingegeben vergleichen ... bei std::string kein Problem ... { std::cout << "Richtig!" << std::endl; ++match_points; // anzahl der richtigen antworten erhöhen ... } else std::cout << "Falsch! Die richtige Antwort lautet: \"" << vec_questions[question].second << "\"" << std::endl; // geben wir uns halt die richtige antwort aus wenns falsch war ... second ist ja das 2. element des std::pairs und d.h. auch die Lösung der Frage ... } std::cout << "Sie haben " << match_points << " Fragen richtig und " << (vec_questions.size() - match_points) << " falsch beantwortet! (Insgesammt: " << vec_questions.size() << ")" << std::endl; // Naja .... vec_questions.size() ist ja die anzahl an Elemente unseres vectors ... und match_point die anzahl richtiger antworten ... die differenz bildet die anzahl falscher antworten ;)
std::cin.clear(); // des was jetzt kommt ist nur damit die Konsole solange offen bleibt bis der Benutzer mit ner beliebigen taste dein Programm beendet ... std::cin.ignore(std::cin.rdbuf()->in_avail()); std::cin.get();
return0; }
so wenn de noch Fragen hast ...
und wie in der PM ... die antwort auf deine 2. Frage lautet while bzw do-while-Schleife ...