Programm ist zu kompliziert!
-
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; } } }
-
Das aufrufen von srand in der Funktion ist sehr ungünstig. Das sollte nämlich nur einmal im Programm passieren. Du tust es aber vor jedem Aufruf und wenn die Zeitschritte zwischen zwei Aufrufen so klein sind, daß time keinen Unterschied feststellt kriegst Du die gleiche Zahl geliefert.
Probier mal ein
int array[100];
for(int i=0; i<100; ++i)
array[i] = DeinZufallsgenerator();und laß Dir danach das Array ausgeben.
MfG Jester
-
Jester schrieb:
Das aufrufen von srand in der Funktion ist sehr ungünstig. Das sollte nämlich nur einmal im Programm passieren. Du tust es aber vor jedem Aufruf und wenn die Zeitschritte zwischen zwei Aufrufen so klein sind, daß time keinen Unterschied feststellt kriegst Du die gleiche Zahl geliefert.
Probier mal ein
int array[100];
for(int i=0; i<100; ++i)
array[i] = DeinZufallsgenerator();und laß Dir danach das Array ausgeben.
MfG Jester
Ja, das stimmt. Man kann srand() auch manuell beim Start des Programms ausführen lassen.
Ich habe schon lange nicht mehr mit Randoms gearbeitet
-
Danke für die schnellen Verbesserung! Dann kann ich ja übers Wochende richtig büffeln bzw. spielen (EA GAMES present: "VOKABOLATOR"). Ok der war sch***** aber Hauptsache ich lern irgendwann mal programmieren.
Gruss Axo