Warscheinlich für euch eine einfache Frage =)



  • Hallo Zusammen

    Ich habe ein Problem. Bei folgedem Programm kommt immer einen Fehler (Unbehandelte Ausnahme bei 0x70549348 (msvcr90d.dll) in gfhdfgh.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x00000000)

    Das Programm funktioniert, bis ich den "alten Lohn" eigeben muss:

    #include<stdio.h>

    void main(void)
    {
    char Vorname[10];
    char Nachname[10];
    int lohnalt = 0;
    int lohnneu = 0;

    printf("Vorname:");
    scanf("%s",Vorname);

    printf("Nachname:");
    scanf("%s",Nachname);

    printf("\nHerzlich Willkommen in unserer Firma: %s %s" ,Nachname,Vorname);

    printf("\n\nSomit haben Sie sich erfolgreich in unser Firmen-Netzwerk eingeloggt. \n");

    fflush(stdin);
    getchar();

    printf("Bitte geben Sie Ihren alten Lohn (den den Sie in der vorherigen Firma \n");
    printf("bekamen und den neuen den Sie hier bei uns erhalten und wir werden \n");
    printf("Ihnen die Differenz der beiden Löhne errechnen.\n");

    getchar();

    printf("Alten Lohn:");
    scanf("%lf",lohnalt);

    getchar();

    printf("\n Neuen Lohn:");
    scanf("%lf",lohnneu);
    }

    Wenn mir jemand helfen könnte wäre das genial 👍 😃



  • int lohnalt = 0;
    int lohnneu = 0;
    

    Hi, die Variablen lohnalt und lohnneu sind Integer-Variablen (d.h. für ganzzahlige Werte).

    scanf("%lf",lohnalt);
    scanf("%lf",lohnneu);
    

    Mit "%lf" versuchst Du Fließkomma-Zahlen in eine Variable mit Integer-Werte zu speichern. Das kann nicht gut gehen.

    Nimm stattdessen "%d":

    scanf("%d",lohnalt);
    scanf("%d",lohnneu);
    

    HTH,
    Martin



  • Mmacher schrieb:

    Nimm stattdessen "%d":

    scanf("%d",lohnalt);
    scanf("%d",lohnneu);
    

    Geht leider auch nicht.. Kommt genau die gleiche Fehlermeldung..

    und jetzt ?



  • Hallo Jashmidi,

    char Vorname[256];
    char Nachname[256];
    
    scanf("%d",&lohnalt);
    scanf("%d",&lohnneu);
    

    scanf erwartet Adressen

    Zwar sind die scans für Vorname und Nachname immer noch unsicher,
    aber deutlich sicherer als vorher.

    Auf dem Stack kann man problemlos 256 Zeichen anlegen,
    'kostet' auch nicht wirklich mehr als 10 Zeichen

    Gruß Frank



  • Frank Erdorf schrieb:

    scanf erwartet Adressen

    Oh, wie peinlich, hab natürlich total übersehen.
    Hab schon seit Jahren nicht mehr scanf() angewendet...

    Martin



  • @Mmacher

    mach dir nichts daraus,
    war ja nicht dein Fehler und
    ich habe auch etwas länger suchen müssen ...

    @Jashmidi
    gute Fehlermeldung, guter erster Post,
    aber doch drei 'fiese' Fehler in soo wenig Code ...

    Alle geeignet beliebiges Verhalten zu produzieren.
    Versuche das Thema Pointer zu verstehen,
    sonst wirst du viele 'komische' Phänomene beim Programmieren erleben.

    Gruß Frank



  • Jashmidi schrieb:

    fflush(stdin);

    Führt zu undefiniertem Verhalten. fflush ist nur für output-streams definiert, steht alles auch in der FAQ, d.h. wird immer wieder falsch gemacht.



  • Bei mir geht das wunderbar.



  • ............. schrieb:

    Bei mir geht das wunderbar.

    Das kann durchaus sein. Allerdings muss das nicht für jedes Betriebssystem so sein. Du arbeitest bestimmt unter Windows. Unter Linux sieht die Sache, glaube ich zumindest, schon ganz anders aus.



  • Im übrigen heißt es int main und nicht void main.



  • ----------- schrieb:

    Im übrigen heißt es int main und nicht void main.

    Das fiese ist ja, es gibt Entwicklungsumgebungen die automatisch ein void statt ein int setzen. - > Ist sowieso ein Streitthema.



  • inflames2k schrieb:

    Das fiese ist ja, es gibt Entwicklungsumgebungen die automatisch ein void statt ein int setzen. - > Ist sowieso ein Streitthema.

    Wieso Streitthema? Der Standard sagt: Kein void main. Und fertig.



  • Das sollte mit C-Streams besser funktionieren als fflush(stdin):
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39349.html


Anmelden zum Antworten