void Funktion in einer void Funktion???
-
terraner schrieb:
Mit break brichst du nur aus dem switch aus, aber bleibst in der do-while Schleife. Du bräuchtest z.B. goto
Ach Quark, goto ist doof, break kann auch Argumente erhalten, um aus geschachtelten Schleifen raus zu springen.
-
Ja Danke, dass mit dem return geht auch.
Hab aber leider immer noch das gleiche Problem wie am Anfang.
Er will nicht von der 2. void Funktion in die 1. void Funktion wechseln.
Da zeigt mir der compiler eine Fehlermeldung.
void write (char wzeichen)
{
do
{
cout << "WRITE-MENÜ:";
cout << endl;
cout << "c : (close) Datei schließen" << endl;
cout << "r : (read) Datei lesen" << endl;
cout << "w : (write) Datei schreiben" << endl;
cout << "u : (unlock) Datei freigeben" << endl;
cout << "Ihre Eingabe: " << endl;cin >> wzeichen;
switch (wzeichen)
{
case 'c' : return;
case 'r' : {cout << "Datei wird gelesen" << endl;}break;
case 'w' : {cout << "Datei wird geschrieben" << endl;}break;
case 'u' : { // das hier schluckt der compiler
char rzeichen; //nicht; irgendwas mit no matching
read (rzeichen); }break; //funktion for call to
//`read(char&)´
default : {cout << "Unzulässige Eingabe" << endl;}break;
}
}
while (wzeichen != 'c');
}hier is noch mein Hauptprogramm (int main), dort müsste aber (glaube ich) alles korrekt sein.
int main ( )
{
char eingabe;
do
{cout << "STARTMENÜ:" << endl;
cout << endl;
cout << "o : (open) Datei öffnen" << endl;
cout << "e : (end) Programmende" << endl;
cout << "Ihre eingabe: " << endl;cin >> eingabe;
switch (eingabe)
{
case 'o' : {cout << "Datei öffnen" << endl;char rzeichen ;
read (rzeichen);}break;
case 'e' : {cout << "Und Tschüss" << endl;}break;default : {cout << "Unzulässige Eingabe" << endl;}break;
}
}
while (eingabe!='e');
return 0;
}Das Programm soll also so ablaufen, das ich im Startmenü über 'o' in die void read Funktion wechsele. Von dort über 'l' in die void write Funktion.
Bis dort hin läuft alles.
Dann will ich aber von der void write Funktion wieder durch 'u' zurück in die read Funktion. Und das klappt nicht.
-
char rzeichen ; read (rzeichen);
das musst du nicht machen
einfachread( );
und
void read( ){ char rzeichen ... }
case 'c' : {}break;
nach einem case brauchst du keine geschweiften klammern machen
vielleicht solltest du dir nochmal die grundlagen angucken
-
Strogij schrieb:
terraner schrieb:
Mit break brichst du nur aus dem switch aus, aber bleibst in der do-while Schleife. Du bräuchtest z.B. goto
Ach Quark, goto ist doof, break kann auch Argumente erhalten, um aus geschachtelten Schleifen raus zu springen.
Wirklich?
Die Möglichkeit kenne ich gar nicht.
mfg
-
Danke.
Das mit der geschweiften Klammer in der case Anweisung muss man nicht machen.Weiß ich, aber der Prof. verlangt das von uns.
Der Code:
void read( ){ char rzeichen ... }wo soll ich denn den hinschreiben? Hab doch schon eine void read Funktion.
(siehe weiter oben)das mit nur "read ()" hab ich ausprobiert.
Kommt jetzt ne andere Fehlermeldung: undefined reverence to `read ()`
(benutzt cygwin)
-
borg schrieb:
case 'c' : {}break;
nach einem case brauchst du keine geschweiften klammern machen
er brauch das spätestens, wenn er in einem case block eine variable deklariert, deshalb ist es gut, wenn ers jetzt schon macht, dann kann ers nämlich nie falsch machen(ausserdem finde ich persönlich die geschweiften Klammern verdammt übersichtlich)
-
terraner schrieb:
Strogij schrieb:
terraner schrieb:
Mit break brichst du nur aus dem switch aus, aber bleibst in der do-while Schleife. Du bräuchtest z.B. goto
Ach Quark, goto ist doof, break kann auch Argumente erhalten, um aus geschachtelten Schleifen raus zu springen.
Wirklich?
Die Möglichkeit kenne ich gar nicht.
mfg
meiner meinung nach gibts das in c++ nicht. in java z.b. geht das soviel ich weiss, aber ich will mich jetzt nicht zu weit aus dem fenster lehnen.
-
Hallo,
terraner schrieb:
Wirklich? Die Möglichkeit kenne ich gar nicht.
die gibt es auch nicht, muß er mit irgendetwas verwechselt haben.
MfG
-
japro schrieb:
meiner meinung nach gibts das in c++ nicht. in java z.b. geht das soviel ich weiss, aber ich will mich jetzt nicht zu weit aus dem fenster lehnen.
IMHO, da aber auch nur wenn man vor die äußere Schleife ein Label setzt, ist also eigentlich auch nichts anderes als ein goto.
-
Hallo,
ich habe hier leider ein bischen den überblick verloren, aber ich denke, die eigentliche Frage war:Wie kann ich aus einer Funktion a die Funktion b auf rufen und geleichzeitig aus der Funktion b die Funktion a aufruftn.
Da hilft es die Funktion b vor der Funktion a zu deklarieren, aber erst nach a zu implementieren, also
void write (char wzeichen) //mit semikolon void read (char rzeichen ) { // whatever } void write (char wzeichen) { // hier erst die implementierung von write }
LG, J.
-
Verdammt, wo ist mein Semilolon geblieben?!?
So ist's richtiger...void write (char wzeichen); //mit semikolon void read (char rzeichen ) { // whatever } void write (char wzeichen) { // hier erst die implementierung von write }
LG, J.[/quote]
-
terraner schrieb:
Strogij schrieb:
terraner schrieb:
Mit break brichst du nur aus dem switch aus, aber bleibst in der do-while Schleife. Du bräuchtest z.B. goto
Ach Quark, goto ist doof, break kann auch Argumente erhalten, um aus geschachtelten Schleifen raus zu springen.
Wirklich?
Die Möglichkeit kenne ich gar nicht.
mfg
Entschuldigung, habe mich geirrt, in PHP gibt es diese Möglichkeit.
-
Danke joeX (C++ Gott).
Super erklärt.
Hat direkt funktioniert.Läuft einwandfrei.Respekt.
-
Das nächste Problem ist aufgetreten.
Programm wechselt einwandfrei zwischen den beiden Funktionen (read und write)
Wenn ich mich jetzt im write menü (write Funktion) befinde und ich die case Anweisung 'c' durchführe springt er ins vorherige read menu (read Funktion).
Jetzt soll die write Funktion arber so arbeiten, dass sie bei der case Anweisung 'c' in mein Startmenü (int main) wechselt.
Kann mir da ein netter C++ Freak weiterhelfen
Hier nochmal das ganze programm.
# include <iostream>
using namespace std;void write (char wzeichen);
void read (char rzeichen )
{
do
{
cout << "READ-MENÜ:" << endl;
cout << endl;
cout << "c : (close) Datei schließen" << endl;
cout << "r : (read) Datei lesen" << endl;
cout << "l : (lock) Datei zum Schreiben sperren" << endl;
cout << "Ihre Eingabe: " << endl;cin >> rzeichen;
switch (rzeichen)
{
case 'c' : return;
case 'r' : {cout << "Datei wird gelesen" << endl;}break;
case 'l' : {
char wzeichen;
write (wzeichen); //Aufruf write Funktion
}break;
default : {cout << "Unzulässige Eingabe" << endl;}break;
}
}
while (rzeichen != 'c');
}void write (char wzeichen)
{
do
{
cout << "WRITE-MENÜ:";
cout << endl;
cout << "c : (close) Datei schließen" << endl;
cout << "r : (read) Datei lesen" << endl;
cout << "w : (write) Datei schreiben" << endl;
cout << "u : (unlock) Datei freigeben" << endl;
cout << "Ihre Eingabe: " << endl;cin >> wzeichen;
switch (wzeichen)
{
case 'c' : return;
case 'r' : {cout << "Datei wird gelesen" << endl;}break;
case 'w' : {cout << "Datei wird geschrieben" << endl;}break;
case 'u' : {
char rzeichen;
read (rzeichen); //Aufruf read Funktion
}break;
default : {cout << "Unzulässige Eingabe" << endl;}break;
}
}
while (wzeichen != 'c');
}int main ( )
{
char eingabe;
do
{
cout << "STARTMENÜ:" << endl;
cout << endl;
cout << "o : (open) Datei öffnen" << endl;
cout << "e : (end) Programmende" << endl;
cout << "Ihre eingabe: " << endl;cin >> eingabe;
switch (eingabe)
{
case 'o' : {cout << "Datei öffnen" << endl;
char rzeichen ;
read (rzeichen); // Aufruf read Funktion
}break;
case 'e' : {cout << "Und Tschüss" << endl;}break;default : {cout << "Unzulässige Eingabe" << endl;}break;
}
}
while (eingabe!='e');
return 0;
}
-
dein code ist ohne code-tags absolut unleserlich!
da tun einem die Augen weh.
Die Antwort ligt doch schon in deiner Frage: überlege mal was du mit
case 'c' : return
in deiner write-Funktion bewirkst??
in deiner main wird rzeichen gar kein Wert
warum hat deine read-Funktion überhaupt einen Übergabeparameter??
-
Dich hat eigentlich schon jemand darauf hingewiesen, aber da hast du nicht verstanden, was er will.
Deshalb versuche ich's jetzt nochmal: Ich werde dir ersst weiterhelfen, wenn du mir folgendes erklärst: Warum hat deine read-Funktion ein Argument (rzeichen)? Was auch immer ich übergebe ist der Funktion egal, da es direkt durch die Eingabe über cin überschrieben wird.
-
Na toll, jetzt hat freshman auch nochmal drauf hingewiesen
-
warum hat überhaupt eine der beiden Fkts einen Parameter??
in read:
cin >> rzeichen
in write:
cin >> wzeichen
irgendwie alles zum schießen, wenn man sich den Code mal anschaut!
@Schranzer: Kennst du nen 'Modulplan'?? bitte nicht schlagen, soll ja noch nicht mal ein Ablaufdiagramm sein aber überleg' dir mal genau, was die Fkts alles leisten sollen und ob sie irgendwelche Informationen von den aufrufenden Funktionen bekommen sollen und von wo aus du wohin willst.
-
warum hat überhaupt eine der beiden Fkts einen Parameter??
Also es wurde darauf hingewisen. Das hat er Ignoriert. Dann hast du und ich beide nochmal darauf hingewisen. Das du es jetzt nochmal ansprichst ist irgendwie überflüssig.
BTW, Schranz ist scheiße
-
konnte nicht anders....fand es irgendwie nur urkomisch