Code kann ohne einen fehler compiliert werden aber beim ausführen und nach der 1. Eingabe stürzt das Programm ab!



  • Eine Code von mir kann ohne einen Fehler compiliert werden aber beim ausführen und nach der 1. Eingabe stürzt das Programm ab!
    Danach versucht Windows eine Lösung für das Problem zu finden.
    Ich finde im Code keinen Fehler bin aber noch neu im Gebiet C++!

    Wenn ihr mir helfen könnt wäre es schön die Ergänzungen oder Änderungen zu erklären! 😃

    #include <stdio.h>
    
    int main () {
    
    int c ;
    
    printf ("Taschenrechner\n\n");
    
    printf ("Um eine Summe auszurechen geben sie bitte 1 ein!\n Um eine Differenz auszurechnen geben sie bitte 2 ein!\n") ;
    
    scanf ("%d" ,  c);
    
    if (c = 2 ) {
    
    float a,b;
    
    printf ("Geben sie ihre 1. Zahl ein! :") ;	
    
    scanf ("%f", &a);
    
    printf ("Geben sie ihre 2. Zahl ein! :") ;
    
    scanf ("%f", &b) ;
    
    printf("Die Differenz aus den beiden Zahlen ergibt: %f",a-b ) ;
    return 0;
    
    }else { 
    printf ("Taschenrechner\n\n");
    
    printf ("Um eine Summe auszurechen geben sie bitte Summe ein!\n Um eine Differenz auszurechnen geben sie bitte Differenz ein!\n") ;
    
    float a,b;
    
    printf ("Geben sie ihre 1. Zahl ein! :") ;	
    
    scanf ("%f", &a);
    
    printf ("Geben sie ihre 2. Zahl ein! :") ;
    
    scanf ("%f", &b) ;
    
    printf("Die Differenz aus den beiden Zahlen ergibt: %f",a-b ) ;
    return 0;
    
    }	
    }
    


  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum C (alle ISO-Standards) verschoben.

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

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    Wie man seinen Beitrag lesbar formatiert

    Compilerwarnungen aktivieren. Der Compiler sollte dir jede Menge über dein Programm zu sagen haben, denn da sind jede Menge Dinge drin, die für den Compiler als falsch erkennbar sind. Es sind bloß streng genommen keine Fehler, bei denen er die Compilierung verweigern dürfte, da die Sprache C recht laxe Regeln hat.



  • Ergebnisse von clang 3.8 unter gcc.godbolt.org mit -Wall

    int c ;
    !!note: initialize the variable 'c' to silence this warning
    19

    ...

    26
    scanf ("%d" , c);
    !!warning: format specifies type 'int *' but the argument has type 'int' [-Wformat]
    !!warning: variable 'c' is uninitialized when used here [-Wuninitialized]
    27

    ...

    28
    if (c = 2 ) {
    !!warning: using the result of an assignment as a condition without parentheses [-Wparentheses]
    !!note: place parentheses around the assignment to silence this warning
    !!note: use '==' to turn this assignment into an equality comparison



  • SeppJ schrieb:

    Wie man seinen Beitrag lesbar formatiert

    Compilerwarnungen aktivieren. Der Compiler sollte dir jede Menge über dein Programm zu sagen haben, denn da sind jede Menge Dinge drin, die für den Compiler als falsch erkennbar sind. Es sind bloß streng genommen keine Fehler, bei denen er die Compilierung verweigern dürfte, da die Sprache C recht laxe Regeln hat.

    Habe Dev C++ als Compiler und unter Projekteinstellungen>Compiler hab ich alle Warnungen an!

    PS: Formatierung tut mir leid!!



  • Gast3 schrieb:

    Ergebnisse von clang 3.8 unter gcc.godbolt.org mit -Wall

    int c ;
    !!note: initialize the variable 'c' to silence this warning
    19

    ...

    26
    scanf ("%d" , c);
    !!warning: format specifies type 'int *' but the argument has type 'int' [-Wformat]
    !!warning: variable 'c' is uninitialized when used here [-Wuninitialized]
    27

    ...

    28
    if (c = 2 ) {
    !!warning: using the result of an assignment as a condition without parentheses [-Wparentheses]
    !!note: place parentheses around the assignment to silence this warning
    !!note: use '==' to turn this assignment into an equality comparison

    Es tut mir leid wenn ich mich jetzt etwas dumm anstellen, aber ist c nicht mit int schon initalisiert wurden?



  • Nox151 schrieb:

    Habe Dev C++ als Compiler und unter Projekteinstellungen>Compiler hab ich alle Warnungen an!

    Kurz nachgeschaut, die aktuellste Version, die ich auf die Schnelle finden konnte, verwendet GCC 3.4.2. Die ist asbachuralt.

    Wenn dir dein Compiler weder fehlende Initialisierung noch fehlerhafte Parametertypen beim Übersetzen anzeigt, ist sie scheiße.

    Nox151 schrieb:

    PS: Formatierung tut mir leid!!

    Tut dir kein Stück Leid, hör auf, so frech zu lügen. Wenn es dir Leid tun würde, hättest du deinen Post korrigiert, bevor du sowas schreibst.

    Ich habe jetzt fett Bock, dir zu helfen ...

    Nox151 schrieb:

    Es tut mir leid wenn ich mich jetzt etwas dumm anstellen, aber ist c nicht mit int schon initalisiert wurden?

    Nein, damit gibst du nur den Typen an. Nicht den Wert, den die Variabel bekommt. Der Compiler reserviert dann nur halt Speicher auf dem Stack für dich, aber was da drin steht, ist undefiniert.

    Globale und statische Variablen werden mit 0 initialisiert.



  • Danke für deine Hilfe ,aber

    1. Ich habe nicht gelogen und meine es ERNST!!!!!!!
    2. Schade dachte ist ein Forum auf dem man sich normal unterhalten kann...
    3. Habe meine Beitrag jetzt korrigiert!

    Wäre trotzdem schön wenn du mir weiterhelfen könntest 😉 :

    Welchen Compiler würdest du empfehlen?
    Ist in meinem Fall der Anfangswert nicht egal da er sich mit scanf eh ändert?



  • Nox151 schrieb:

    1. Ich habe nicht gelogen und meine es ERNST!!!!!!!

    Immer mit der Ruhe, ich sehe es ja, du hast es korrigiert. Ein einfaches "Hast recht, habe ich vergessen, Code-Tags sind drinne" reicht.

    Nox151 schrieb:

    2. Schade dachte ist ein Forum auf dem man sich normal unterhalten kann...

    Das ist ein fachbezogenes Hilfeforum. Wir haben auch 'ne Quasselecke, aber hier sollte nur Fachzeugs rein.

    Nox151 schrieb:

    Welchen Compiler würdest du empfehlen?

    Auf Windows Visual Studio 2015. Langsam*, aber ist meines Wissens für kleine Entwickler kostenlos.
    Auf Linux GCC. Derzeit. Habe viel gutes über clang gehört, aber der soll noch geringfügig schlechteren Binärcode ausliefern (habe ich aber noch nicht getestet).

    Nox151 schrieb:

    Ist in meinem Fall der Anfangswert nicht egal da er sich mit scanf eh ändert?

    Ah, aber du änderst ihn ja gar nicht. Du übergibst ja nur den (undefinierten) Wert der Variabel an scanf , nicht die (definierte) Adresse. Dafür fehlt dir aber der Adressoperator vor deiner Variabel.

    Bei a und b hast du diese nicht vergessen.

    *damit meine ich: braucht Ewigkeiten, um Projekte zu laden. Im Vergleich kompiliere ich auf Linux doppelt so schnell.



  • Dein mit DevC++ mitgelieferter Compiler ist OK, für deine Zwecke vollkommen ausreichend.
    Z15: scanf benötigt als Parameter immer eine Adresse, du übergibst aber einen (int)-Wert, korrekt wäre also &c
    Z17: der Compiler sagt dir genau, was du tun sollst, also mache es auch so


  • Mod

    Nox151 schrieb:

    Welchen Compiler würdest du empfehlen?

    Ein GCC in aktuell wäre ganz gut. Unter Windows auch der Microsoft Compiler, der mit Microsofts Visual Studio IDE kommt (es gibt eine frei Version davon!).

    Ist in meinem Fall der Anfangswert nicht egal da er sich mit scanf eh ändert?

    Jain. Da spielt dann der andere Fehler rein:

    scanf ("%d" , c);
    !!warning: format specifies type 'int *' but the argument has type 'int' [-Wformat]
    

    Guck dir noch einmal an, wie scanf genutzt wird (anderswo hast du es richtig gemacht). Dann verschwindet auch automatisch die andere Warnung. Derzeit erkennt der Compiler, dass c dort fälschlich ohne vorherige Initialisierung ausgewertet wird. Aber du willst dort c eigentlich gar nicht direkt benutzen, das ist eben der andere Fehler.

    Lass dich nicht zu sehr von dem Ton mancher Leute hier abschrecken. Manche Leute sind eben so drauf, andere nicht.



  • Es gibt Dev C++ auch in einer neueren Version.
    Heißt jetzt Orwell Dev-C++ (ist aber auch schon wieder ein Jahr alt).

    Das mit dem "nicht initialisiert" ist bei dir nicht so wichtig, da du vor der ersten Benutzung den Wert mit scanf einliest (bzw. möchtest, dies aber falsch machst)



  • Ich lade mir gleich VSC runter!

    Einen Fehler habe ich gefunden 😉 :

    scanf ("%d" ,  &c);
    

    den anderen habe ich auch verbessert :

    if (c == 2 )
    

    C habe ich jetzt einfach den Wert 0 zugewiesen geht das so?

    int c ; 
    
    c=0;
    

    Trotzdem stürzt das Programm weiterhin ab 😞

    Hat es vielleicht damit etwas zu tun, dass ich in Z17

    scanf ("%d" ,  &c);
    

    benutze und in Z25

    scanf ("%f", &a);
    

    ?



  • DirkB schrieb:

    Es gibt Dev C++ auch in einer neueren Version.
    Heißt jetzt Orwell Dev-C++ (ist aber auch schon wieder ein Jahr alt).

    Das mit dem "nicht initialisiert" ist bei dir nicht so wichtig, da du vor der ersten Benutzung den Wert mit scanf einliest (bzw. möchtest, dies aber falsch machst)

    Habe ich den von dir gemeinten Fehler schon im Beitrag oben verbessert? Ich glaube schon 😉



  • Mir ist bei solchen Zusammenhängen mal aufgefallen, dass der gcc/mingw64 etwas mehr (Standard-)Fehlerdoku herausgibt als andere Compiler.
    Was ist in diesem Zusammenhang vom Intel Compiler zu erwarten?



  • Nox151 schrieb:

    Trotzdem stürzt das Programm weiterhin ab 😞

    Wie äußert sich das?

    Oder schließt sich nur das Konsolenfenster (oft auch DOS-Fenster genannt)?



  • DirkB schrieb:

    Nox151 schrieb:

    Trotzdem stürzt das Programm weiterhin ab 😞

    Wie äußert sich das?

    Oder schließt sich nur das Konsolenfenster (oft auch DOS-Fenster genannt)?

    Zuerst läuft es und nach dem eingeben einer zahl (um halt entweder Summe oder Differenz auszurechnen)
    öffnet sich ein anderes fenster in dem steht Taschenrechner.exe funktioniert nicht mehr es wird eine Lösung für das Problem gesucht...
    Das geht schief und ich kann die exe nur noch schließen.
    Es steht kurz vor dem schließen noch das hier als Ergebnis

    Taschenrechner
    
    Um eine Summe auszurechen geben sie bitte 1 ein!
     Um eine Differenz auszurechnen geben sie bitte 2 ein!
    2  (hier habe ich 2 und enter gedrückt danach kam das funktioniert nicht mehr fenster)
    
    --------------------------------
    Process exited after 11.94 seconds with return value 3221225477
    Drücken Sie eine beliebige Taste . . .(nach dem schließen dieses fensters kommt noch alles unter den Strichen)
    

    PS: Code-Funktion nur genutzt um es übersichtlicher zu gestalten 😉



  • Das sieht danach aus, das du entweder das Programm nicht neu übersetzt hast, oder immer noch das & bei scanf ("%d" , &c); fehlt.

    Ändere mal etwas den Einführungstext

    printf ("Taschenrechner "__TIME__"\n\n");
    


  • DirkB schrieb:

    Das sieht danach aus, das du entweder das Programm nicht neu übersetzt hast, oder immer noch das & bei scanf ("%d" , &c); fehlt.

    Ändere mal etwas den Einführungstext

    printf ("Taschenrechner "__TIME__"\n\n");
    

    Ich hab es korrigiert 🙂 glaub ich zumindestenz 😃

    Den Einführungstext hab ich nach deinem Beispiel verändert!

    Hier nochmal der ganze Code:

    #include <stdio.h> 
    
    int main () { 
    
    int c ; 
    
    c=0;
    
    printf ("Taschenrechner "__TIME__"\n\n");
    
    printf ("Um eine Summe auszurechen geben sie bitte 1 ein!\n Um eine Differenz auszurechnen geben sie bitte 2 ein!\n") ; 
    
    scanf ("%d" ,  &c); 
    
    if (c == 2 ) { 
    
    float a,b; 
    
    printf ("Geben sie ihre 1. Zahl ein! :") ;  
    
    scanf ("%f", &a); 
    
    printf ("Geben sie ihre 2. Zahl ein! :") ; 
    
    scanf ("%f", &b) ; 
    
    printf("Die Differenz aus den beiden Zahlen ergibt: %f",a-b ) ; 
    return 0; 
    
    }else { 
    printf ("Taschenrechner\n\n"); 
    
    printf ("Um eine Summe auszurechen geben sie bitte Summe ein!\n Um eine Differenz auszurechnen geben sie bitte Differenz ein!\n") ; 
    
    float a,b; 
    
    printf ("Geben sie ihre 1. Zahl ein! :") ;  
    
    scanf ("%f", &a); 
    
    printf ("Geben sie ihre 2. Zahl ein! :") ; 
    
    scanf ("%f", &b) ; 
    
    printf("Die Differenz aus den beiden Zahlen ergibt: %f",a-b ) ; 
    
    }   
    }
    

    Ist das soweit wie du meintest richtig?



  • Ja.
    Jetzt sollte beim ausführen die Uhrzeit vom compilieren hinter "Tastenrechner" stehen.


Log in to reply