Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » If hilfe

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
07.03.2007, 14:37 Uhr
kordian10



hallo
ich bin neu und fange gerade an c++ zu lernen und wollte fragen ob mir hier helfen kann.

Code:
#include <iostream>
using namespace std;
// Hauptprogramm
int main (void)
{
    int Leer = 0;
    int Punkte = 0;
    int Falsch = 0;
    char Frage1 [] = "Das wievielte Quiz ist das?";
    char antwort1 [] = "";
    char richtig1 [] = "das erste";
   cout << "Guten Tag" << endl;
   cout << "Willkommen zum 1. Quiz" << endl;
   cout << "Frage1:" << endl;
   cout << Frage1 << endl;
    cin >> antwort1;
    if (antwort1 == richtig1)
    {
                 cout << "Richtig" << endl;
                 Punkte += 1;
                 cin >> Leer;
    }
    else
    {
        cout << "Falsch" << endl;
        Falsch += 1;
        cin >> Leer;
    }
        
                
   cin >> Leer;
}

Der fehler ist das nach der beantwortung schließ das programm. kann mir hier jemand helfen?
es sollten dann noch mehr fragen kommen, aber später
mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.03.2007, 14:56 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.03.2007, 15:00 Uhr
BoBtheREapER
kein job für nen BoB


c++:

C++:
#include <iostream>
using namespace 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
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
07.03.2007, 15:00 Uhr
Kest
saint


Oder auch so (obwohl mit string viel einfacher wäre):


C++:
#include <iostream>
#include <algorithm>


using namespace 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";
    
    
   cout << "Guten Tag" << endl;
   cout << "Willkommen zum 1. Quiz" << endl;
   cout << "Frage1:" << endl;
   cout << Frage1 << endl;
   cin.getline(antwort1, 255);

    if (std::equal(richtig1, richtig1+sizeof(richtig1), antwort1))
    {
                 cout << "Richtig" << endl;
                 Punkte += 1;
                 cin >> Leer;
    }
    else
    {
        cout << "Falsch" << endl;
        Falsch += 1;
        cin >> Leer;
    }
        
                
   cin >> Leer;
  

--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
07.03.2007, 15:08 Uhr
xXx
Devil


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 ...


C++:
#include <iostream>
#include <string>
#include <vector>

int main ()
{
    unsigned short 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 ...  

    for (size_t question = 0; question < vec_questions.size(); ++question)
    {
        std::cout << (question + 1) << ". " << vec_questions[question].first << "?" << std::endl;
        std::string string_answer;
        std::getline(std::cin, string_answer);
        if (vec_questions[question].second == string_answer)
        {
            std::cout << "Richtig!" << std::endl;
            ++match_points;
        }
        else
            std::cout << "Falsch! Die richtige Antwort lautet: \"" << vec_questions[question].second << "\"" << std::endl;
    }
    std::cout << "Sie haben " << match_points << " Fragen richtig und " << (vec_questions.size() - match_points) << " falsch beantwortet! (Insgesammt: " << vec_questions.size() << ")" << std::endl;
    
    std::cin.clear();
    std::cin.ignore(std::cin.rdbuf()->in_avail());
    std::cin.get();    

    return 0;
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
07.03.2007, 15:08 Uhr
xXx
Devil


hmm ein wenig zu spät ^^ naja dafür habsch direkt das ganze Programm angepasst
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
07.03.2007, 15:13 Uhr
kordian10



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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
07.03.2007, 15:42 Uhr
kordian10



Noch eine
kann man die main funktion wiederholen bis man in eine bestimmte klammer kommt?

Code:
cout << "Ergebnis:\nRichtig:" << Punkte << "\nFalsch:" << Falsch << endl;
  
   if (Punkte >= 2)
   {
   cout << "Bravo " << endl;
   }
   else
   {
   cout << "Pech gehabt, Versuchs nochmal" << endl;
   cin >> Leer;
}



man sollte zb mehr als 2 punkt haben damit das programm geschlossen wird
mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
07.03.2007, 20:16 Uhr
xXx
Devil


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 ()
{
    unsigned short 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();    

    return 0;
}
so wenn de noch Fragen hast ...

und wie in der PM ... die antwort auf deine 2. Frage lautet while bzw do-while-Schleife ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
07.03.2007, 21:13 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Anmerkung:
Die Lösung ist für nen Anfänger noch etwas komplex, da sollte man lieber langsam anfangen

ansonsten: make_pair dürfte noch <utility> benötigen
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: