2016-11-03 5 views
0

Also habe ich an einem Projekt gearbeitet, das einfach ein Befehlszeilenprogramm ist. Das Problem, auf das ich stoße, ist, wenn ich einen Rechner erstellen wollte. Der Code sieht wie folgt aus:Unbehandelte Ausnahme bei 0x0f65f508 (msvcr100d.dll)

int calculator() 
{ 
char oper[1]; 
double x, y; 
x = 1; 
y = 1; 
printf("Starting calculator...\n\n"); 
printf("Input an operator you want to execute: "); 
gets(oper); 

if (strncmp(oper, "+", 1) == 0) 
{ 
    printf("\ncalculator works like this x + y =\n"); 
    printf("input x value:\n"); 
    scanf("%lf",x); 
    printf("input y value:\n"); 
    scanf("%lf",y); 
    printf("%.1lf + %.1lf = %.1lf\n",x, y, x+y); 

} 
else if (strncmp(oper, "-", 1) == 0) 
{ 
    printf("\ncalculator works like this x - y =\n"); 
    printf("input x value:\n"); 
    scanf("%lf",x); 
    printf("input y value:\n"); 
    scanf("%lf",y); 
    printf("%.1lf + %.1lf = %.1lf\n",x, y, x+y); 


} 
else if (strncmp(oper, "*", 1) == 0) 
{ 
    printf("\ncalculator works like this x * y =\n"); 
    printf("input x value:\n"); 
    scanf("%lf",x); 
    printf("input y value:\n"); 
    scanf("%lf",y); 
    printf("%.1lf + %.1lf = %.1lf\n",x, y, x+y); 

} 
else if (strncmp(oper, "/", 1) == 0) 
{ 
    printf("\ncalculator works like this x/y =\n"); 
    printf("input x value:\n"); 
    scanf("%lf",x); 
    printf("input y value:\n"); 
    scanf("%lf",y); 
    printf("%.1lf + %.1lf = %.1lf\n",x, y, x+y); 
} 
else 
{ 
    printf("Incorrect operator, please try again!\n"); 
} 
} 

Nach wenigen Beispiele und Tutorials es sollte funktionieren, und es tut. Aber die Probleme beginnen nach dem Ausführen des Codes. Es funktioniert gut, bis der x-Wert eingefügt wird. Gleich danach erscheint der Fehler:

Unbehandelte Ausnahme bei 0x0f74f508 (msvcr100d.dll) in program.exe: 0xC0000005: Zugriffsverletzung Schreibort 0x00000000.

Ich habe ähnliche Fragen wie diese gesehen, aber keine von ihnen gab wirklich die Lösung. Danke für Ihre Hilfe!

+0

** ** nie jemals verwenden 'gets' ersetzen! Es ist eine defekte Funktion, die aus späteren C-Standards entfernt wird. Sie haben deswegen mindestens einen Pufferüberlauf! Verwenden Sie stattdessen 'fgets'. – user694733

+1

Und reservieren Sie mindestens 2 Zeichen für die Variable 'oper []', um die NZ nach dem eingegebenen Operator zu speichern. –

+0

@Lord Wolfram: scanf ("% lf", x); Hmm ... könnte das das Problem verursachen? – babon

Antwort

0

Versuchen scanf("%lf",x); mit scanf("%lf",&x);

Verwandte Themen