Programm ist zu kompliziert!
-
Euro Tipps haben mir schon sehr beim weiterkommen geholfen aber ich merke das das einzelne eintragen einfach viel zu kompliziert ist! Könnte mir vielleicht irgendjemand zeigen wie ich das ganze vereinfachen kann(am besten praktisch).
#include <iostream> #include <string> using namespace std; int main() { string j, i1; cout << "Franz" << static_cast<char>(148)<< "sisch Vokabeltrainer 0.3" << endl << endl; //Aufgabe 1 marke: i1 = "être" ; //Fehler aber wie kann ich hier Ansi- //Code verwenden ?????? cout<<"sein"<<endl<<" " ; getline(cin,j); if(i1 == j) cout<<endl<<endl; else {cout<<"falsch"; goto marke;} getchar(); cin.get(); return 0; }
Am besten wäre wenn man für jede neue Vokabel nur zwei neue Werte eintragen müsste. Goto (hab ich gehört) soll man zwar nicht verwenden aber wenn die Antwort falsch war solls halt nochmal ein zwei Antworten zurück gehen.
Gruss Axo
-
also, ich verstehe dein problem nicht ganz, weil ich den gewünschten ablauf des programms nicht verstehe.
aber schon man ein kleiner tip, schreib ordentlicher
statt:
if(i1 == j) cout<<endl<<endl; else {cout<<"falsch"; goto marke;} getchar(); cin.get(); return 0; }
schreibst du besser:
if (i1 == j) cout<<endl<<endl; else { cout<<"falsch"; goto marke; } getchar(); cin.get(); return 0; }
und goto sollte man wirklich nur einstzen, wenn es keine andere möglichkeit gibt, und das ist extrem selten. nimm doch eine schleife (z.b. do...while)
-
Hi,
goto sollte man gar nicht mehr einsetzen.
Zumindest ich habe es wirklich noch nie gebraucht!Ich verwende statt
while (bla) { while (bla) { goto raus; } } raus
lieber sowas, um aus verschachtelten Schleifen zu springen:
bool bShouldRun = true; while (bla) { while (bla) { bShouldRun = false; break; } if (!bShouldRun) break; }
ChrisM
-
In meinen C++ Büchern steht auch, dass man "goto" nicht verwenden sollte...
Da der Code dadurch unübersichtlich wird.
Aber ich Persönlich finde es nicht so schlimm, wenn man "goto" in kleineren Programmen verwendet.
Noch ein Tipp: Leg doch eine Datei an, wo die ganzen strings drinnen sind, z.b. Woerter.h oder Woerter.hpp, und binde sie dann mit
#include "Woerter.h" // b.z.w. #include "Woerter.hpp"
Leider kann ich dir im moment kein besseren Code Schreiben, da ich kein Compiler auf der Platte hab
Vielleicht morgen... mal sehen!
-
ChrisM schrieb:
Hi,
goto sollte man gar nicht mehr einsetzen.
Zumindest ich habe es wirklich noch nie gebraucht!Ich verwende statt
while (bla) { while (bla) { goto raus; } } raus
lieber sowas, um aus verschachtelten Schleifen zu springen:
bool bShouldRun = true; while (bla) { while (bla) { bShouldRun = false; break; } if (!bShouldRun) break; }
ChrisM
Gerade in diesem Beispiel finde ich das goto aber tatsächlich schöner. Allerdings kommt man in diese Situation fast nie (ich hab in 10.000 Zeilen nur ein einziges goto), wenn man anständig programmiert. Mehrere verschachtelte Schleifen kann man wunderbar in eine Funktion auslagern und mit return verlassen.
-
Wer anständig konzepiert wird selten einen Fall haben, wo es wirklich nicht ohne goto geht bzw. schön ist.
-
so wie ich das verstehe, soll beim programm das franz. wort für "sein" vom
benutzer eingegeben werden und dann verglichen. ich glaube, dass du eine art
lernprogramm machst und dein problem ist die abfrage immer wieder einzugeben.
mein vorschlag:
x -> zufallszahl
char *c_deutsch[9000000] -> array der dt. wörter
char *c_franz[9000000] -> array der franz. wörter
char *eingabe -> eingegebener string
achtung! das franz. wort muss auf dem selben speicherplatz wie das dt. sein.
z.Bsp: c_deutsch[10000] = "sein" muss das franz. ebenfalls auf 10000 sein, also
c_franz[10000] = "être"
als nähstes brauchst due eine schleife, die solange läuft bis eingabe "exit"ist
in der schleife wird x eine zufallszahl zugewiesen
mit cout << c_deutsch[x]; sagtst du dem user welches wort verlangt wird
er gits ein
wenn es stimmt "richtig" ansonsten "falsch"
jetzt kannst du das rchtige wort anzeigen lassen
schleifen ende
-
hier ist mein code:
#include <iostream> void main() { int x; char *dt[5]; char *fr[5]; char *eingabe; dt[0]="ich"; dt[1]="du"; dt[2]="er"; dt[3]="wir"; dt[4]="ihr"; dt[5]="sie (m.)"; fr[0]="je"; fr[1]0"tu"; fr[2]="il"; fr[3]0"nous"; fr[4]="vous"; fr[5]0"ils"; while (eingabe != "exit") { x = DeinZufallszahlgenerator(0 bis 5); cout << dt[x] << "\n"; cin >> eingabe; if (eingabe == fr[x]) cout<<"richtig!\n"; else { cout<<"falsch!\n" cout<<"richtig waere: " << fr[x] << "\n"; } } }
ich habs nicht ausprobiert, könnten also noch fehler enthalten aber ich glaube
es zu debuggen wird wohl nicht so schwer sein.
-
Verwende doch eine Map für deinen Vokabeltrainer...
-
Du kannst es mit Array's (Feldern) machen, und dabei Funktionen benutzen.
Mach die Wörter dann in eine Zusätzliche Datei, und lass sie mit einer Schleife Durchlaufen (foreach, falls es die in C++ gibt
)
Du kannst auch noch ein zusätzliches Programm schreiben, wo man die Wörter dem Programm "Lernen" kann, indem man diese mit "fwrite" in eine Datei einträgt (*.txt), und mit "fopen" öffnet...
kannst ja auch noch "rand" oder "srand" benutzen, um eins von den Wörtern auszusuchen
-
Serious - Tobi schrieb:
Du kannst es mit Array's (Feldern) machen, und dabei Funktionen benutzen.
Mach die Wörter dann in eine Zusätzliche Datei, und lass sie mit einer Schleife Durchlaufen (foreach, falls es die in C++ gibt
)
Du kannst auch noch ein zusätzliches Programm schreiben, wo man die Wörter dem Programm "Lernen" kann, indem man diese mit "fwrite" in eine Datei einträgt (*.txt), und mit "fopen" öffnet...
kannst ja auch noch "rand" oder "srand" benutzen, um eins von den Wörtern auszusuchen
Eine Map ist hier deutlich besser, da sie immer 2 Werte einander zuordnet.
Und einlesen mit fopen und fwrite tut man nicht mehr in C++, dafür gibts iostreams.http://c-plusplus.net/forum/viewtopic.php?t=39469
Devil
-
char* == char* ist böse, vor allem in Programmbeispielen wenn ma nicht weiss das das nicht geht
-
dreaddy schrieb:
char* == char* ist böse, vor allem in Programmbeispielen wenn ma nicht weiss das das nicht geht
ich weiss, dass es nicht geht. hatte keine lust den code länger zu machnen, da
1. es fürh war als ich das schrieb und deswegen noch halb im schlaf
2. er auch seinen eigenen verstand benutzen solleine map ist auch 'ne gute idee
-
@INTEGER:
Garnicht schön, das in eine Textdatei einzulesen ist viel sinnvoller, sonst sieht der Code nur unnötig hässlich aus...
-
Habs erstmal INTEGER versucht. Nur einen (bestimmt lächerlichen)Fehler hab ich nicht rausgekriegt.
x = DeinZufallszahlgenerator(0 bis 5);
25 F:\c++\pro\franz2\main2.cpp
parse error before numeric constant
-
char* x = "DeinZufallszahlgenerator(0 bis 5)"; // du hast die "" vergessen!
Mit dem bößen char*
Oder mach ne INTEGER (int) Funktion, die einen booleschen (heisst das so? oder boolschen :D) Wert zurückliefert, z.b.:
if (ueberpruefen == 0) cout <<"Richtig!"; else cout <<"Falsch!";
LOL, vielleicht geht's ja, habs net ausprobiert
-
Natürlich musst du erst die Funktion DeinZufallszahlgenerator() definieren, um sie anwenden zu können.
Oder du benutzt den Zufallsgenerator der Standardbiliothek.#include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main() { srand(time(NULL)); cout << rand()%6; }
-
Hmm mit "" gehts auch net.
5 F:\c++\pro\franz2\main2.cpp `main' must return `int'
F:\c++\pro\franz2\main2.cpp [Warning] In function `int main(...)':
25 F:\c++\pro\franz2\main2.cpp invalid conversion from `const char*' to `int'
F:\c++\pro\franz2\Makefile.win [Build Error] [main2.o] Error 1
#include <iostream>
using namespace std;void main()
{
int x;
char *dt[5];
char *fr[5];
char *eingabe;
dt[0]="ich";
dt[1]="du";
dt[2]="er";
dt[3]="wir";
dt[4]="ihr";
dt[5]="sie (m.)";
fr[0]="je";
fr[1]="tu";
fr[2]="il";
fr[3]="nous";
fr[4]="vous";
fr[5]="ils";while (eingabe != "exit")
{
x = "DeinZufallszahlgenerator(0 bis 5)";
cin >> eingabe;
if (eingabe == fr[x])
cout<<"richtig!\n";
else
{
cout<<"falsch!\n" ;
return 0;
}
}
}
-
also entwerde du setzt ein int vor die main() oder du nimmst das return 0 raus
x = "DeinZufallszahlgenerator(0 bis 5)";
das geht so nicht. du versuchst da ein character in ein integer umzuwandeln
ich denke mal deinZufallszahlgenerator soll ne funktion sein oder?x = deineFunktion();
dann muss das so lauten. wobei die Funktion einen int-wert zurückgeben muss
-
#include <iostream> #include <cstdlib> #include <string> #include <ctime> using namespace std; // deine Funktion int DeinZufallszahlgenerator() { srand(time(NULL)); return rand()%6; } int main() { int x; char* dt[5]; char* fr[5]; string eingabe; dt[0]="ich"; dt[1]="du"; dt[2]="er"; dt[3]="wir"; dt[4]="ihr"; dt[5]="sie (m.)"; fr[0]="je"; fr[1]="tu"; fr[2]="il"; fr[3]="nous"; fr[4]="vous"; fr[5]="ils"; while (eingabe != "exit") { x = DeinZufallszahlgenerator(); cout << dt[x] << "\n"; cin >> eingabe; if (eingabe == fr[x]) cout << "richtig!\n"; else { cout << "falsch!\n" ; cout << "richtig waere: " << fr[x] << "\n"; return 0; } } }