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



  • 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.



  • Steht sie aber nicht und jetzt?



  • Nox151 schrieb:

    Ist das soweit wie du meintest richtig?

    Bis auf den Stil, ja.

    Und jetzt nimm mal diesen Code, damit du direkt siehst, wie man's richtig macht:

    #include <stdio.h>
    
    int main(void)
    {
            int c;
            float a,b;
    
            printf ("Taschenrechner "__TIME__"\n\n");
    
            printf("Geben sie ihre 1. Zahl ein: ");
            scanf("%f",&a);
    
            printf ("Geben sie ihre 2. Zahl ein: ");
            scanf("%f",&b);
    
            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 == 1)
                    printf("Die Summe der beiden Zahlen ergibt: %f",a + b);
            else
                    printf("Die Differenz aus den beiden Zahlen ergibt: %f",a - b);
    
            printf("\n");
    
            return 0;
    }
    

    Das ist auch über 9000-mal lesbarer.

    Nox151 schrieb:

    Steht sie aber nicht und jetzt?

    Dann wurde dein Programm nicht neu kompiliert. Gibt dir deine IDE keine Fehlermeldung raus beim Kompilieren? "Kann Datei x nicht schreiben: Kein Zugriff" oder dergleichen? Oder es wurde neu kompiliert, aber du rufst noch ein altes Kompilat auf.



  • Nox151 schrieb:

    Steht sie aber nicht und jetzt?

    Dann solltest du das Programm nochmal compilieren.
    Und auch auf Fehler- bzw. Erfolgsmeldung achten.



  • Habe mir jetzt Code::Blocks runtergeladen.
    Damit läuft der Standard Code den ich zuerst geschrieben hatte!
    Es lag scheinbar am veralteten Compiler aber trotzdem danke für eure Hilfe!!!!!!!!!!!!!!!!!!!!!!!!!!!! 👍 👍 👍



  • Nox151 schrieb:

    Damit läuft der Standard Code den ich zuerst geschrieben hatte!

    Wenn du den Code vom Eröffnungspost meinst, dann ist das falsch.

    Nox151 schrieb:

    Es lag scheinbar am veralteten Compiler ...

    Auch das ist falsch.
    Das war ein PEBKAC oder Layer 8 Error, da du den Compiler nicht bedienen konntest.


Anmelden zum Antworten