Komme nicht weiter "Frage/Antwort" Programm
-
Hallo,
Was ist hier falsch?
#include <iostream> #include <string> using namespace std; int main() { string gut; string schlecht; string eingabe; cout << "\nHallo, wie geht es Dir? "; cin >> eingabe; if (eingabe==gut) { cout << "\nSchoen das es dir " << eingabe << " geht! :-)" << endl; if (eingabe==schlecht) { cout << "\nSchade dass es Dir so " << eingabe << " geht. :-(" << endl; } } else cout << "\nSorry das Wort \"" << eingabe << "\" kenne ich gar nicht. :-|" << endl; return 0; }
Das Programm soll so ausfĂŒhren, wenn ich eingebe "gut" dann zu mir sagt "Schoen das es Die gut geht". Genauso auch wie mit "schlecht". Leider gibt mir das Programm immer die Antwort "Wort kenne ich nicht aus".
-
naja ich weiss ja nicht recht, aber hast du denn schon eine Idee, ich denke so einige hier haben keine lust Lösungen zu verschenken bzw anderen das denken abzunehmen.. nunja gehts dir denn um den lerneffekt ?
wenn ja ĂŒberleg doch mal was du in den ifs vergleichst
-
Ich bin jetzt einen kleinen Schritt weitergekommen und zwar habe ich vollgendes ergÀnzt:
#include <iostream> #include <string> using namespace std; int main() { string positiv = "gut"; // ergÀnzung string negativ = "schlecht"; // ergÀnzung string eingabe; cout << "\nHallo, wie geht es Dir? "; cin >> eingabe; if (eingabe==positiv) { cout << "\nSchoen das es dir " << eingabe << " geht! :-)" << endl; if (eingabe==negativ) { cout << "\nSchade dass es Dir so " << eingabe << " geht. :-(" << endl; } } else cout << "\nSorry das Wort \"" << eingabe << "\" kenne ich gar nicht. :-|" << endl; return 0; }
Jetzt klappt das mit der "if (eingabe==gut)" Aweisung, aber immer noch nicht die "if (eingabe==negativ)" Anweisung!
Ich glaube ich mach mal ne Denkpause, mein Kopf der qualmt schon! WĂ€re nett wenn mir jemand weiterhelfen wĂŒrde, vielleicht fehlt ein Befehl was ich noch nicht kenne, da ich noch in der AnfĂ€ngerphase bin.
Danke
Alex N.
-
Ok, da das ein Problem ist, welches ich lösen kann, will ich dir auch gerne helfen.
Doch als erstes noch etwas "psychologisches". Wahrscheinlich hast du gerade ein Brett vorm Kopf, da du die Lösung eigentlich schon selbst in deinem zweiten Programm hast.
Guck nochmal GENAU hin, WIE du die strings definiert hast.Ansonsnten wenn du gar nicht weiterweisst:
if(eingabe==gut) //EDITED
Ich weiss zwar nicht WAS genau C++ da vergleicht.
Was du aber verglichen haben möchtest ist:if(eingabe=="gut") //EDITED
nÀmlich ein String.
Und den musst du durch die " " kennzeichnen.
Was du ja auch schon in deiner zweiten Version, jedoch an "falscher" Stellegemacht hast.
@Edit, sorry hatte die variablennamen aus deinem zweiten Beispielcode aus den Augenwinkeln ĂŒbernommen. So sollte es funktionieren.
p.s. Horray for the EditButton.
-
na das ist doch schon mal gut, nun schau dir noch mal deine if abfragen an.
if (eingabe==positiv) { cout << "\nSchoen das es dir " << eingabe << " geht! :-)" << endl; if (eingabe==negativ) { cout << "\nSchade dass es Dir so " << eingabe << " geht. :-(" << endl; } } ......... else cout << "\nSorry das Wort \"" << eingabe << "\" kenne ich gar nicht. :-|" << endl;
wie man sieht kontrollierst du ob die eingabe positiv ist wenn nein... ...hui gehst du in den else bereich ? ich denke das ist nicht was du willst, denn sonst prĂŒfst du nur obs schlecht geht, wenn die eingabe positiv ist..
hoffe mit dem tip bekommst du es hin
-
@Freak, tja da haben wohl wir beide ein psychologisches Problem. Denn deine Version klappt leider auch nicht. Mach mal dein Compiler startklar und lass mal diesen Code kompilieren, wirst du schon sehen.
[EDIT]
Weil der String "positiv" zu positiv deklariert wurde, ist es egal ob ich schreibe if (eingabe=="positiv") oder if (eingabe==positiv), da kommt das ein und das selbe Ergebnis heraus.@shapeless, kannste mal Klartext schreiben? Verstehe ich immer noch nicht so ganz.
-
AlexNeumann schrieb:
egal ob ich schreibe if (eingabe=="positiv") oder if (eingabe==positiv), da kommt das ein und das selbe Ergebnis heraus.
bestimmt
... int main() { string positiv("positiv"); string negativ("negativ"); string eingabe; ...
-
AlexNeumann schrieb:
@shapeless, kannste mal Klartext schreiben? Verstehe ich immer noch nicht so ganz.
Bin zwar nicht shapeless, aber ich hoffe, du haust mich deswegen nicht.
Er meinte, dass du deine If-Blöcke falsch verschachtelt hast. Denn wenn die Eingabe "positiv" ist, wird ĂŒberprĂŒft, ob die Eingabe negativ ist, was sie ja aber nie sein wird.
if (eingabe==positiv) { cout << "\nSchoen das es dir " << eingabe << " geht! :-)" << endl; } else if (eingabe==negativ) { cout << "\nSchade dass es Dir so " << eingabe << " geht. :-(" << endl; } else { cout << "\nSorry das Wort \"" << eingabe << "\" kenne ich gar nicht. :-|" << endl; }
-
du hast die if abfragen geschachtelt. das ist Unsinn in diesem Fall. Denn du willst ja auf "schlecht " prĂŒfen wenn es nicht gut ist . du testes aber nur wenns schon positiv ist und das muss immer falsch sein.
Bsp
input=schlecht
if(input==gut){...}
else
falsche eingabe
wie du siehst kannst du nicht auf "schlecht prĂŒfenSinnvoll wĂ€re
input
if(input==gut)
else if(input==schlecht)
elsehoffe es ist nun klarer
//edit thx masterofx32 ..gg ist nicht schlimm .. gute nacht ^^
-
Ahhh die Seite ist wieder erreichbar, bin aber froh.
Danke fĂŒr den Tipp zu "else if", es klappt diesmal. Ich bin zwar vorher auch schon gekommen, aber die Anweisungsblöcke haben noch nicht so richtig gepasst.
Je mehr Anweisungsblöcke hinzukommen, um so mehr blicke ich nicht mehr durch!. Naja AnfÀngerphase
. Ich habe auch schon in anderen Foren gepostet und da wurde mir geholfen. Hier jetzt mal der Update:
#include <iostream> #include <string> using namespace std; int main() { string positiv = "gut"; string negativ = "schlecht"; char eingabe[255]; cout << "\nHallo, wie geht es Dir? "; cin.getline(eingabe, 255, '\n'); if (eingabe==positiv) { cout << "\nSchoen das es dir " << eingabe << " geht! :-)" << endl; } else if (eingabe==negativ) { cout << "\nSchade dass es Dir so " << eingabe << " geht. :-(" << endl; } else { cout << "\nSorry das Wort \"" << eingabe << "\" kenne ich gar nicht. :-|" << endl; } return 0; }
Ich habe dann zuzĂŒglich "String eingabe;" gegen "char eingabe[255]" getauscht und die Anweisung "cin >> eingabe;" gegen "cin.getline(eingabe, 255, '\n'" damit auch ein Text mit Leerzeichen erkannt wird. Find ich praktischer.
Nun möchte ich noch herausfinden, wie man mehere Wörter zu positiv und negativ deklariert. Ich meine mit Arrays oder Klassen, aber damit beschĂ€ftige ich mich spĂ€ter, sonst wird dass zu viel fĂŒr mich aufeinmal.
-
1te möglichkeit )
hmm du könntest einfach mehrere wörter in einen string schreiben und dann mittels "find" suchen.
bsp:
std::string gut("gut passt ok japp perfekt bestens");
if((gut.find(eingabe)) != ende von gut)
dann gut
else if( schlecht.find ...... )
dann schlecht
else
etwas anderes2te)
ein array von strings gut definierenin einer schleife durchlaufen und mit der eingabe vergleichen
wenns gefunden wird "positive ausgabe" und beendensonst
mit schleife fĂŒr schlechte werte durchlaufen ... wie oben verfahren.sonst
falsche eingabe
-
AlexNeumann schrieb:
Je mehr Anweisungsblöcke hinzukommen, um so mehr blicke ich nicht mehr durch!
. Naja AnfÀngerphase
.
Du solltest dir gleich angewöhnen, deinen Code richtig einzurĂŒcken. Bei jedem neuen Block rĂŒckst du mit Tab einmal ein und dann sind die Verschachtelungen auch auf den ersten Blick sichtbar. Wohin du die geschweiften Klammern setzt ist Geschmackssache, da gĂ€be es diese beiden meistgenutzten Arten:
#include <iostream> #include <string> using namespace std; int main() { string positiv = "gut"; string negativ = "schlecht"; char eingabe[255]; cout << "\nHallo, wie geht es Dir? "; cin.getline(eingabe, 255, '\n'); if (eingabe==positiv) { cout << "\nSchoen das es dir " << eingabe << " geht! :-)" << endl; } else if (eingabe==negativ) { cout << "\nSchade dass es Dir so " << eingabe << " geht. :-(" << endl; } else { cout << "\nSorry das Wort \"" << eingabe << "\" kenne ich gar nicht. :-|" << endl; } return 0; }
#include <iostream> #include <string> using namespace std; int main() { string positiv = "gut"; string negativ = "schlecht"; char eingabe[255]; cout << "\nHallo, wie geht es Dir? "; cin.getline(eingabe, 255, '\n'); if (eingabe==positiv) { cout << "\nSchoen das es dir " << eingabe << " geht! :-)" << endl; } else if (eingabe==negativ) { cout << "\nSchade dass es Dir so " << eingabe << " geht. :-(" << endl; } else { cout << "\nSorry das Wort \"" << eingabe << "\" kenne ich gar nicht. :-|" << endl; } return 0; }
-
Ich habe noch ne Variante. Das ist aber nicht von mir, sondern aus dem anderen Forum. Diesmal mit Erweiterter deklaration.
#define NUMPOSANTW 4 //anzahl der positiven antworten #define NUMNEGANTW 2 //anzahl der negativen antworten #include <iostream> #include <string> using namespace std; int main() { string positiv[NUMPOSANTW] = { "gut", "supi", "toll", "klasse" }; string negativ[NUMNEGANTW] = { "schlecht", "mies" }; string eingabe; int i =0; cout << "\nHallo, wie geht es Dir? "; cin >> eingabe; for(i=0;i<NUMPOSANTW;i++) { if(eingabe == positiv[i]) { cout << "\nSchoen das es dir " << eingabe << " geht! :-)" << endl; return 0; } } for(i=0;i<NUMNEGANTW;i++) { if(eingabe == negativ[i]) { cout << "\nSchade dass es Dir so " << eingabe << " geht. :-(" << endl; return 0; } } cout << "\nSorry das Wort \"" << eingabe << "\" kenne ich gar nicht. :-|" << endl; return 0; }
Allerdings meldet der Borland Compiler eine Warnmeldung aus, dass die Zeile 12 betrifft. Aber das Programm ist ausfĂŒhrbar.
Nun meine Frage: Ist dieser Quellcode gĂŒltig trotz der Warnmeldung?
-
Wenn es "NUR" eine Warnung ist, kannst DU natĂŒrlich weitermachen, aber man sollte auch Warnungen schon ernst nehmen und den code dann prĂŒfen.
Und dann solltest Du schon zeigen, welches Deine "Zeile 12" ist.
-
wahrscheinlich
int i = 0; // sollte sein ; int i; //... i= 0;
-
HannsW schrieb:
Wenn es "NUR" eine Warnung ist, kannst DU natĂŒrlich weitermachen, aber man sollte auch Warnungen schon ernst nehmen und den code dann prĂŒfen.
Und dann solltest Du schon zeigen, welches Deine "Zeile 12" ist.Dann zÀhl doch mal. Ok, ich helfe dir. Und zwar geht es um die Deklaration "int i = 0".
-
HannsW schrieb:
wahrscheinlich
int i = 0; // sollte sein ; int i; //... i= 0;
Ob ich schreibe "int i = 0;" oder "int i" und nÀchste Zeile "i = 0", ist doch das selbe!
Oder schreib ich schwachsinn?
-
Welche Warnung gibt er denn aus ?? ( Dein Compiler)
-
HannsW schrieb:
Welche Warnung gibt er denn aus ?? ( Dein Compiler)
@Admin,
Hier fehlt noch'nen [img] BBCode.
-
Das ist auch Quatsch was du da machst. Du initialisierst i mit 0 und zwei Zeilen spÀter nochmal. Mach es (auch in Zukunft) doch einfach so:
#define NUMPOSANTW 4 //anzahl der positiven antworten #define NUMNEGANTW 2 //anzahl der negativen antworten #include <iostream> #include <string> using namespace std; int main() { string positiv[NUMPOSANTW] = { "gut", "supi", "toll", "klasse" }; string negativ[NUMNEGANTW] = { "schlecht", "mies" }; string eingabe; cout << "\nHallo, wie geht es Dir? "; cin >> eingabe; for(int i=0;i<NUMPOSANTW;i++) { if(eingabe == positiv[i]) { cout << "\nSchoen das es dir " << eingabe << " geht! :-)" << endl; return 0; } } for(int i=0;i<NUMNEGANTW;i++) { if(eingabe == negativ[i]) { cout << "\nSchade dass es Dir so " << eingabe << " geht. :-(" << endl; return 0; } } cout << "\nSorry das Wort \"" << eingabe << "\" kenne ich gar nicht. :-|" << endl; return 0; }