Hilfe bei einfachen C Programm



  • Hallo zusammen, ich besucher zurzeit ein Berufskollege für IT, und haben jetzt angefangen mit C Programmieren, nur leider habe ich kaum ahnung von C, und brauche deshalb eure Hilfe. Also wir solten ein Volumen Programm schreiben, was das Volumen von einen Quader und eines Zylinders Berechnet. Nun zu meinen Problem, wen ich jetzt als auswahl die 1 eingebe, und dan alles Berechne, erscheint das auswahl fenster direkt nach der rechnung wieder siehe screenshot.

    http://img-up.net/?up=hilfeTDHG.jpg

    #include <stdio.h>
    
    main (void)
    
    {
     int wahl;
     printf("\n\n***********************************************************************");
     printf("\nProgramm zur Berechnung des Volumens eines Quaders oder eines Zylinders");
     printf("\n***********************************************************************");
     printf("\n\nWelches Volumen soll berechnet werden?");
     printf("\n\nQuadervolumen <bitte die 1 eingeben>");
     printf("\nZylindervolumen <bitte die 2 eingeben>");
     printf("\n\nIhre Auswahl bitte: ");
     scanf("%i", &wahl);
    
     if (wahl == 1)
      { 
       float laenge, breite, tiefe, ergebnis; 
       printf("\n\n\nGeben Sie die Laenge <in Meter> des Quaders ein: "); 
       scanf("%f", &laenge); 
       printf("Geben Sie die Breite <in Meter> des Quaders ein: "); 
       scanf("%f", &breite); 
       printf("Geben Sie die Tiefe  <in Meter> des Quaders ein: "); 
       scanf("%f", &tiefe); 
       ergebnis = laenge * breite * tiefe; 
       printf("\n\nDas Volumen des Quaders betraegt: %.3f m3\n", ergebnis); 
       printf("---------------------------------------------\n\n");
      }
    
     if (wahl == 2)
      {
       float hoehe, radius, ergebnis;  
       printf("\n\n\nGeben Sie den Radius des Zylinders ein: "); 
       scanf("%f", &radius); 
       printf("Geben sie die Hoehe des Zylinders ein: "); 
       scanf("%f", &hoehe); 
       ergebnis = radius * radius * 3.14 * hoehe; 
       printf("\n\nDas Volumen des Zylinders betraegt: %.3f m3\n", ergebnis); 
       printf("-----------------------------------------------\n\n");
      }
    
        else
         {  
         main(); 
         }
    
    }
    

    Bitte Helft mir.



  • Kein Wunder: Nachdem die Bedingung in "if (wahl == 1)" abgearbeitet, geht er weiter im Code. Da kommt "if (wahl == 2)", was nicht erfüllt ist, danach "else main();". Weil wahl also nicht gleich zwei ist, führt er die main-Funktion nochmal aus. Und darin wird nochmal das Einleitungszeug ausgegeben 🙂



  • spotan sage ich mal, der fehler liegt hier:

    if (wahl == 2)
     [...]
     else
     {  
       main(); //<- hier rufst du dein hauptpogramm zum zweiten mal auf.
     }
    

    nimm das else und den anschließenden block raus und du solltest glücklich werden. 😉



  • Du könntest ja if else verwenden? Vielleicht schafft das Aushilfe?
    Oder eine switch Anweisung -> http://www.cppreference.com/keywords/switch.html



  • Danke erstmal. Ich dachte dan kehrt das Programm zum Anfang zrück, ich wollte das nämlich so machen das wen der User eine adere eingabe auser 1 oder 2 macht, das das programm zum anfang zurück kehrt.

    Achja und ich hab noch eine Frage kann ich das irgendwie machen, das wen der user zb. auswahl 1 trift, das der alte konsolen inhalt gelöscht wird, und der neue Inhalt erscheint.



  • Eines noch: main als Funktion innerhalb eines Programms aufzurufen ist undefiniert 😉



  • Blacky91 schrieb:

    Danke erstmal. Ich dachte dan kehrt das Programm zum Anfang zrück, ich wollte das nämlich so machen das wen der User eine adere eingabe auser 1 oder 2 macht, das das programm zum anfang zurück kehrt.

    also dafür ist es das beste, wenn du deinen eigentlichen code in eine seperate routine auslagerst, da man für gewöhnlich main() nicht intern aufruft.
    die eigentliche auswahl kannst du am besten über ein switch machen:

    switch(wahl){
        case 1:
              [berechnung für den quader]
              break;
        case 2:
              [berechnung für den zylinder]
              break;
        default:
              [error-message]
              [ansprung der methode]
              break; // braucht man eigentlich nicht, aber pro forma schreibt man es doch hin
    }
    

    das löschen der konsole ist os-abhängig. da du windows nutzt, habe ich keine ahnung wie das geht. 😉



  • Wie mach ich das den das der alte konsolen inhalt gelöscht wird??? und der neue erscheint.

    Tut mir leid das ich so viele Fragen hab, hab aber leider nur 6 Schulstunden erfahrung.



  • #include <stdlib.h>
    
    // ...
    
        // Bildschirm löschen
        system("cls");
    


  • Oder einfach

    clrscr()
    

    (musst aber mal in der Hilfe nach richtigem Header nachschlagen)



  • Vielen Dank jetzt hab ichs richtig. danke danke



  • Tss .. system("cls") ... ähm nein?! Wie oft das schon diskutiert wurde ...
    Und zumindest im C++-Standard sollte Rekursiv-Aufruf von main verboten sein...



  • Hallo??? es gehts um C und net um C++

    @admin

    please close.



  • Für C poste hier:
    http://www.c-plusplus.net/forum/viewforum-var-f-is-10.html

    Du kannst nicht erwarten, dass im C++ Subforum die C - Experten rumspringen 😉 (wobei das natürlich ein sehr triviales Problem ist).
    Insofern ist die Antwort von Devil ganz normal^^ - hier wird C++ erwartet :D.



  • Dieser Thread wurde von Moderator/in CStoll aus dem Forum C++ in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Nur am Rande: Auch in C ist es afaik verboten, main() rekursiv aufzurufen. Bau dir stattdessen lieber eine große Schleife in die main(), die so lange läuft, wie sinnvolle Eingaben ankommen.


Anmelden zum Antworten