Problem mit return()



  • Mach's doch einfach so, print ist aus der veralteten Bibliothek und nicht mehr zu empfehlen!

    int lesen_rechnen_schreiben_funct() 
    { 
    	cout << "<1> Rechnen" << endl;
    	cout << "<2> Schreiben/Lesen" << endl;
    
    	int menu_rechnen_lesen_schreiben;
    	cin >> menu_rechnen_lesen_schreiben;
    
    	return menu_rechnen_lesen_schreiben;
    }
    

    Definiere Variablen erst dort, wo sie wirklich benötigt werden. (Ausnahme zum Beispiel globale Variablen 😃 )



  • Dein Programm könnte dann so aussehen:
    (Wozu auch immer diese Funktion gut sein soll 😃 )

    #include <iostream> 
    using namespace std;
    
    int lesen_rechnen_schreiben_funct() 
    { 
    	cout << "<1> Rechnen" << endl;
    	cout << "<2> Schreiben/Lesen" << endl;
    
    	int menu_rechnen_lesen_schreiben;
    	cin >> menu_rechnen_lesen_schreiben;
    
    	return menu_rechnen_lesen_schreiben;
    } 
    
    void main()
    {
    	cout << lesen_rechnen_schreiben_funct();
    }
    


  • Danke 🙂
    Für <iostream> brauch ich C++

    Kann man das Problem auch nur in C lösen?

    Ich kann nämlich kein C++ 😞

    Alternativ: Wie löse ich diese Fehlermeldungen:
    invalid conversion from `int (*)()' to `int'
    initializing argument 1 of `void menu2(int)'

    Und: Nur das Ich das mal Kapier: return erstellt eine Variable mit dem Funktionsnamen, oder?

    mfg JtR

    P.S.: Warum muss ich immer veraltete Bücher kaufen 😞



  • JACKtheRIPP0R schrieb:

    Kann man das Problem auch nur in C lösen?

    Ich kann nämlich kein C++ 😞

    Achja. Und warum schreibst du dann ins C++-Forum? 🙄



  • Lern C++. Dazu ist es doch da.
    Schlag dich nicht mit veraltetem, unübersichtlichen C herum!

    http://www.amazon.de/exec/obidos/ASIN/3826615344/qid=1141063327/sr=8-1/ref=sr_8_xs_ap_i1_xgl/028-7729664-0336555

    Scheisse ich hab noch die 2. Auflage. Gibt es viele Unterschiede zu der 3. Auflage?



  • Hallo,

    Welchen Befehl würdest du statt fflush(stdin) nehmen?

    C hat keine Befehle, aber Funktionen. Hier die Alternative zu fflush(stdin):

    void clearStdin() {
      int c;
      while ((c=getchar()) != EOF && c != '\n');
    }
    

    JACKtheRIPP0R schrieb:

    Kann man das Problem auch nur in C lösen?

    Kann man. 🙂

    Alternativ: Wie löse ich diese Fehlermeldungen:
    invalid conversion from `int (*)()' to `int'
    initializing argument 1 of `void menu2(int)'

    dazu müssten wir Code sehen...

    Und: Nur das Ich das mal Kapier: return erstellt eine Variable mit dem Funktionsnamen, oder?

    Nein, return gibt einen Wert zurück, oder verlässt eine void-Funktion vorzeitig:

    int add(int a, int b) {
      return a+b;
    }
    
    void foo() {
      if (some_strange_error)
        return;  //Abbruch
      //Sonst weitermachen
      do_other_stuff();
    }
    

    Scheisse ich hab noch die 2. Auflage. Gibt es viele Unterschiede zu der 3. Auflage?

    Kaum, unterschiede sind eher "rechtschreibtechnischer Natur". 😉

    MfG

    GPC



  • o_O So viele Antworten 🙂
    Ich hab mich eigtl. nur mit C beschäftigt, weil sich mein Bruder ein entsprechendes Buch gekauft hatte.
    Nu hab ich aber Blut geleckt 😃

    @Kenner der Vorgehensweise: Hatte ich jetzt spontan auch vor. Ich hab mir sogar das gleiche Buch rausgesucht. 😉

    @FireFlow: Übersehen 😉 Ich dachte es gibt kein reines C Forum. Habs aber schon gefunden.

    @gpc: Deine Alternative zu fflush(stdin) ist mir ehrlichgesagt zu hoch.

    Was sagst du zu getchar() alleine?

    Wohin gibt return denn den Wert zurück, bzw. wie komm ich an den Wert dann außerhalb der Funktion ran?

    Ich werd mich jetzt mal in C++ einarbeiten und dann weitersehen.

    Nettes Forum hier, ich komm auf jeden Fall wieder *nerv*

    Wen es interessiert:
    Mein erstes C-Programm 😃

    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>
    using namespace std;
    //Sämtliche Variablen
    char name[100];
    char name1[100]; /* In der Funktion "name_richtig" */
    char name2[100]; /* In der Funktion "eingabe" */
    int ja_oder_nein1;
    int ja_oder_nein1_1;/* In der Funktion "name_richtig" */
    int alter;
    int alter1; /* In der Funktion "name_richtig" */
    int alter2; /* In der Funktion "eingabe" */
    //int menu_rechnen_lesen_schreiben; //Auswahl bei der Funktion "menu2" ("Möchstest du lesen, rechnen, oder schreiben)
    int auswahl_rechnen_lesen_schreiben; //Für Menü (Intern)
    int zahl1; //Für die Rechenfunktion
    int zahl2;
    int ergebnis;
    int auswahl;
    int menu3;
    //Funktionen
    //Benutzer gibt die Daten ein
    void eingabe (char name2[], int alter2)
      {
        printf("Wie heisst du?\n");
        fgets(name,100,stdin);
        fflush(stdin);
        printf("Sers %s",name);
        printf("Wie alt bist du denn?\n");
        scanf("%d",&alter);
        getchar();
      }
    
    //PC fragt den Benutzer, ob der name und das Alter stimmen
    void name_richtig(int alter1, char name1[])
       {  printf("Du bist also %d Jahre alt und heisst %soder? \n(1 fuer \"Ja\", 2 fuer \"Nein\")\n\n",alter, name);
          scanf("%d", &ja_oder_nein1);
          fflush(stdin);
       }
    //PC überprüft die Eingabe aus der Oberen Funktion
    void menu1 (int ja_oder_nein1_1)
         {
            if(ja_oder_nein1_1 == 1)
            { 
            printf("Gut.\n\n");
            }
            else if(ja_oder_nein1_1 == 2)
            {
            printf("Merke: Computer machen keine Fehler! Du musst dich vertippt haben!\nAlso...\n\n");
            eingabe (name, alter);
            name_richtig (alter, name);
            menu1 (ja_oder_nein1);
            }
            else
            {
            printf("Wie war das? Genau: \"1 fuer \"Ja\", 2 fuer \"Nein\"\"\nAlso nochmal ...\n\n");
            name_richtig(alter, name);
            menu1 (ja_oder_nein1);
            }
         }
    //Eingabe zweites Menü
    int lesen_rechnen_schreiben_funct()
    {
        cout << "<1> Rechnen" << endl;
        cout << "<2> Schreiben/Lesen" << endl;
    
        int menu_rechnen_lesen_schreiben;
        cin >> menu_rechnen_lesen_schreiben;
    
        return menu_rechnen_lesen_schreiben;
    } 
    //
    //HAUPTFUNKTIONEN
    //
    //Zu rechnen:
    void ergebnisueberpruefung (int zahl1, int zahl2)
         {
              scanf("%d", &ergebnis);
              fflush(stdin);
              if(ergebnis == (zahl1+zahl2))
                      {
                               printf("Sehr gut! Das Ergebnis war richtig!");
                      }
         }
    void rechnen_ohne ()
         {
                  printf("Die erste Zahl bitte:\n");
                  scanf("%d", &zahl1);
                  printf("\nUnd gleich die zweite:\n");
                  scanf("%d", &zahl2);
                  printf("Danke. Und jetzt bitte die Summe eintippen\n");
                  scanf("%d", &ergebnis);
                  fflush(stdin);
                  if(ergebnis == (zahl1+zahl2))
                      {
                               printf("Sehr gut! Das Ergebnis war richtig!");
                      }
                  else 
                    {
                       printf("Das war leider falsch, gleich nochmal versuchen.\n");
                       printf("Gibt die Summe doch nochmal ein. \n(Zur Erinnerung: Die Zahlen waren %d und %d)\n", zahl1, zahl2);
                       ergebnisueberpruefung (zahl1, zahl2);
                    }     
                  printf("\n\nDas war doch toll! Wollen wir das gleich nochmal machen?");
                  printf("\n\n<1> Jaaa! Nochmaal!\n<2>Nein, bitte was anderes\n");
                  scanf("%d",&auswahl);
                  fflush(stdin);
                  if(auswahl == 1)
                  {
                       rechnen_ohne();
                  }
                  else if(auswahl == 2)
                  {
                       printf("\nNa gut, dann eben was anderes\n");
                       lesen_rechnen_schreiben_funct();
                  }
                  else 
                  {
                       printf(" Bitte nur \"1\" oder\"2\"\n");
                  }
         }
    
    void rechnen(char name1[])
        {
                  printf("Wir rechnen jetzt also, %s", name1);
                  printf("Damit das Programm von so vielen Nutzern wie moeglich benutzt\nwerden kann, werden wir nur ganze Zahlen addieren.\n");
                  printf("Das ganze ist total einfach: Du gibst zwei Zahlen ein, \naddierst sie, und gibst das Ergebnis ein.\n");
                  printf("Die erste Zahl bitte:\n");
                  scanf("%d", &zahl1);
                  printf("\nUnd gleich die zweite:\n");
                  scanf("%d", &zahl2);
                  printf("Danke. Und jetzt bitte die Summe eintippen\n");
                  scanf("%d", &ergebnis);
                  fflush (stdin);
                  if(ergebnis == (zahl1+zahl2))
                      {
                               printf("Sehr gut! Das Ergebnis war richtig!");
                      }
                  else 
                    {
                       printf("Das war leider falsch, gleich nochmal versuchen.\n");
                       printf("Gibt die Summe doch nochmal ein. \n(Zur Erinnerung: Die Zahlen waren %d und %d)\n", zahl1, zahl2);
                       ergebnisueberpruefung (zahl1, zahl2);
                    }     
                  printf("\n\nDas war doch toll! \nWollen wir das gleich nochmal machen?");
                  printf("\n\n<1> Jaaa! Nochmaal!\n<2>Nein, bitte was anderes\n");
                  fflush(stdin);
                  scanf("%d",&auswahl);
                  fflush(stdin);
                  if(auswahl == 1)
                  {
                       rechnen_ohne();
                  }
                  else if(auswahl == 2)
                  {
                       lesen_rechnen_schreiben_funct();
                  }
                  else 
                  {
                       printf("\nBitte nur \"1\" oder\"2\"\nZur Strafe muessen sie nochmal rechnen:\n");
                       rechnen_ohne();
                  }
         }
    //Zu schreiben:
    void schreiben(char name1[])
         {
                    printf("Wir schreiben jetzt also");
         }
    //Zu lesen:
    void lesen_text(char name[])
         {
                   printf      ("Du moechtest also lesen und schreiben ueben,\n");
                   printf      ("Dazu habe ich mir ein ganz besonderes System ausgedacht.\n");
                   printf      ("Als erstes wirst du einen Satz eingeben,\n");
                   printf      ("ihn dann lesen UND direkt wieder eingeben.\n");
                   printf      ("Sie koennen ihren Satz jetzt eingeben. \n");
                   printf      ("Bitte vermeiden sie es eine Zeichenlaenge von 1000 zu überschreiten");
         }
    void lesen()
         {
    
         }
    //Überprufung der Eingabe des zweiten Auswahlmenüs (Lesen, rechnen, od. schreiben)
    void menu2 (int auswahl_rechnen_lesen_schreiben)
        { 
                if(auswahl_rechnen_lesen_schreiben == 1)
                {
                     rechnen(name);
                }
                else if(auswahl_rechnen_lesen_schreiben == 2)
                {
                     lesen_text(name);
                     //schreiben
                }
                else  
                {
                      printf("Auswahlfehler erkannt");
                }
        }
    //
    //Main
    int main(int argc, char *argv[])
    {
       printf("Sers Alter! ");
       eingabe (name, alter);
       name_richtig (alter, name);
       menu1 (ja_oder_nein1);
       printf("Nachdem wir das jetzt geklaert haben, %skoennen wir ja weitermachen\n", name);
       printf("Dies ist ein multifunktionelles Programm.\nWeil es nun dieses Programm gibt, werden die meisten anderen Programme\nueberfluessig.\nDenn mit diesem Programm kannst du Lesen, Schreiben UND Rechnen.\n");
       printf("Welche dieser genialen Funktionen, %smoechtest du als erstes testen?\n", name);
       lesen_rechnen_schreiben_funct ();
       printf("%d",lesen_rechnen_schreiben_funct);
       menu2(lesen_rechnen_schreiben_funct);
    
       system("PAUSE");
      return 0;
    }
    

    mfg JtR



  • Total unübersichtlich, sorry.
    Okay, dein erstes Programm, trotzdem.

    Lass es lieber gleich bleiben, ohne Klassen 100 oder mehr Zeilen zu schreiben, zahlt sich nicht aus 😉

    PS: Das Buch ist wirklich gut!



  • Hab ich erwartet.
    Ich krieg jetzt schon nen Knoten im Hirn, wenn ich irgendwas verändern will 😃

    Ich lern erst noch ein bisschen.

    mfg JtR



  • JACKtheRIPP0R schrieb:

    @gpc: Deine Alternative zu fflush(stdin) ist mir ehrlichgesagt zu hoch.

    Du musst sie ja nicht gleich verstehen, aber kurz gesagt zieht sie solange Zeichen aus stdin ("Tastatur"), bis nichts mehr rauskommt oder ein '\n' rausgeholt wird.

    Was sagst du zu getchar() alleine?

    Nicht so geil, weil man kann immer nur 1 Zeichen holen, nicht mal das ist garantiert, denn du könntest auch nen ganzen Satz eintippen. Also nicht gerade der Königsweg.

    Wohin gibt return denn den Wert zurück, bzw. wie komm ich an den Wert dann außerhalb der Funktion ran?

    Der Wert wird so "geholt":

    #include <iostream>
    
    int add(int a, int b) {
      return a+b;
    }
    
    int main() {
      int ergebnis = add(5+7); 
      std::cout<<ergebnis<<'\n';  //Ausgabe von 12
      return 0;
    }
    

    Eine andere Möglichkeit, an den Rückgabewert heranzukommen hast du nicht (Es gibt noch andere Wege, aber das schaust dir später mal an).

    Wen es interessiert:
    Mein erstes C-Programm 😃

    In C++ wird anstatt stdio.h -> cstdio geschrieben:

    #include <cstdio>
    #include <cmath>
    

    MfG

    GPC


Anmelden zum Antworten