2012-03-25 16 views
0

Ich lerne C und ich übte den Schalter und ich führe das Programm, aber lässt mich nicht eingeben *, +, -, hier ist mein Code. Ich kann die erste und die zweite Nummer eingeben, aber nicht den Operator, nachdem ich die Zahlen eingegeben habe, die das Programm beendet. Nicht sicher warum. Dieses DankeSwitch kleines prgram lässt mich keine Eingabe Option

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
int num1, num2, ans=0; 
char ch, name; 

printf("Enter a value: "); 
scanf("%d",&num1); 

printf("Enter a second value: "); 
scanf("%d",&num2); 

printf("Input * To multiply\ 
       + To add\ 
       - To subtract"); 
scanf("%c",&ch); 

switch(ch) 
{ 
case'*': 
    ans=num1 * num2; 
    printf("%d times %i equals: %i",num1,num2,ans); 
    break; 

case'+': 
    ans=num1+num2; 
    printf("%i plus %i equals: %d",num1,num2,ans); 
    break; 

case'-': 
    ans=num1-num2; 
    printf("%d minus %d equals: %d",num1,num2,ans); 
    break; 

default: 
    printf("Range numbers"); 
} 
return 0; 
} 

Antwort

2

:

scanf("%c",&ch); 

liest das Newline-Zeichen aus dem Eintrag von num2: Sie müssen es überspringen, bevor ch zu lesen.

Wechsel zu:

scanf(" %c", &ch); 

den Raum hinzufügen, bevor die %cscanf instruieren Zeilenumbrüche und Leerzeichen zu überspringen.

+0

Vielen Dank. –

1

Es ist, weil die scanf("%d"), die Sie verwenden, keine zeilenorientierte Funktion ist. Es liest nur die Zahl, lässt aber das Newline-Zeichen im Puffer, der dann vom Aufruf scanf("%c") gelesen wird.

Da Sie eine zeilenbasierte Eingabe vornehmen möchten, möchten Sie wahrscheinlich stattdessen fgets und atoi verwenden, um ein besser definiertes und konsistentes Verhalten zu erhalten. Die Funktion fgets liest immer genau eine Zeile. Zum Beispiel:

char buf[1024]; 

printf("Enter a value: "); 
fgets(buf, sizeof(buf), stdin); 
num1 = atoi(buf); 

/* ... */ 

printf("Enter operator: "); 
fgets(buf, sizeof(buf), stdin); 
ch = buf[0]; 
+0

Vielen Dank. –

Verwandte Themen