programm stürzt ab..wo is der fehler?



  • hi..
    bin jez nich so der C genie ich brings mir seit ner woche halt selber an hand von kleinen programmen die ich mir selber ausdenke bei..

    naja jedenfalls hab ich in dem programm bisher nur die erste auswahlmöglichkeit im menü belegt ( was keine rolle spielen sollte )..wenn ich - wie ihr gleich im quelltext sehn könnt - die taste 'A' / 'a' drücke, stürzt das programm ab...warscheinlich is der fehler total simpel
    aber danke an alle die mir trotzdem helfen..
    gruß
    steffen

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <conio.h>
    
    int main()
    {
     char Vorname[10], Nachname[10], Auswahl;
     float Zahl1, Zahl2, Ergebnis;
     printf("Guten Abend, bitte stellen Sie sich vor!\n\nBitte geben Sie Ihren Vor- und Nachnamen ein.\n\n");
     scanf("%s%s", Vorname, Nachname);   
     printf("\n\nGuten Abend, %s %s\n\n", Vorname, Nachname);
     printf("Welche Option des Programms moechten Sie nutzen?\n\n");
     printf("A)Addieren\nB)Subtrahieren\nC)Multiplizieren\nD)Dividieren");    
     scanf("%s",Auswahl);   
     if(Auswahl=='a' || Auswahl=='A')
     {
      printf("Sie haben sich fuer das Addieren zweier Zahlen entschieden.\n");
      printf("Bitte geben Sie die beiden Zahlen nacheinander ein.\n\n");
      scanf("%f%f", Zahl1, Zahl2);
      Ergebnis = Zahl1 + Zahl2;
      printf("Das Ergenis der Rechnung %f + %f betraegt: %f", Zahl1, Zahl2, Ergebnis);
     } 
    
     getchar();
     getchar();
     return 0;   
    }
    


  • ich markiere dir die Stellen, wo es Fehler gibt. Den Fehler musst du aber selber finden 😉

    ch1ller schrieb:

    int main()
    {
     char [...] Auswahl;
     [...]
     scanf("%s",Auswahl);
     [...]
    


  • Guten Morgen ch1ller,

    der Fehler liegt bei der scanf-Funktion. Wenn du nicht gerade einen Zeiger bzw. String übergibst, musst du bei der Variablen zusätzlich den Adressoperator voranstellen, da die Funktion die Adresse haben möchte. Also:

    /* Für nicht-Zeiger */
    int zahl;
    scanf ("%i", &zahl);
    

    ch1ller schrieb:

    char Vorname[10], Nachname[10], Auswahl;
    ...
    scanf("%s%s", Vorname, Nachname);
    

    Bei diesem scanf-Aufruf würde ich dir empfehlen wirklich nur die jeweils ersten 10 Zeichen auszulesen, da du sonst evtl. über die Arrays hinausschreibst:

    scanf ("%10s%10s", Vorname, Nachname);
    

    Gez. monstermunchkin



  • hey..danke !!! jetzt fällt es mir wieder ein..
    ich hab mal was weiter "gearbeitet" :

    if(Auswahl=='b' || Auswahl=='B')
     {
      printf("Sie haben sich fuer das Subtrahieren zweier Ganz-Zahlen entschieden.\n");
      printf("Bitte geben Sie die beiden Zahlen nacheinander ein.\n");
      scanf("%i%i", &Zahl1, &Zahl2);
      Ergebnis = Zahl1 - Zahl2;
      printf("Zahl %i wurde von Zahl %i abgezogen, das Ergebnis betraegt: %i"), Zahl2, Zahl1, Ergebnis;
     }
    

    an der stelle hier werden in meiner printf funktion einfach wirre riesige zahlen ausgegeben, obwohl ich alles überall als integer definiert habe..sowohl die kontrollausgabe der eingegebenen zahlen(beispiel: 5 und 3), als auch das ergenis sind riesige zahlen und haben nichteinmal verhältnißmäßig etwas mit meiner eingabe zu tun.. bei der printf funktion dadrüber geht es ja auch!
    ( bei der addition ) ..
    also mein verdacht ist, dass halt irgendwie die datentypen falsch sind oder so, da gigantische zahlen ausgegeben werden..

    nach dieser problemlösung hatte ich vor:
    --> das programm gegen fehler abzusichern.. das woltle ich mit do-whil schleifen machen, die nur bestimtme eingaben, ergebnisse etc. zulassen und mich imemr wieder zum anfang zurück schicken

    -->und ich wollte den größten teil des programmes in funktionen packen uns auslagern! da frag ich euch morgen oder heute nachmittag nochmal nach wenn ichs nicht hinbekomme!

    ich danke allen die sich die zeit nehmen mir zu helfen und fortschritte zu machen
    Gruß
    Steffen



  • Du hast die zweite Klammer in Zeile 7 falsch gesetzt 😉


Anmelden zum Antworten