2015-11-06 21 views
3

我剛剛進入了一個開關案例代碼..我不明白爲什麼當我按'1',它仍然會默認情況下總是。初學者切換案例行動總是默認

#include <stdio.h> 

int main() { 
    char c = 0; 
    int x = 0, y = 0; 

    printf("Please write 2 numbers:\n"); 
    scanf("%d %d", &x, &y); 
    printf("Please choose an action from the math menu:\n\n1.add\n2.sub\n"); 
    scanf(" %c", &c); 

    switch (c) 
    { 
    case 1: 
     printf("%d + %d is %d\n", x, y, x+y); 
     break; 

    default: printf("Wrong value\n"); 
     break; 
    } 

    return 0; 
} 
+0

嘗試''案例49''。 「案例1」實際上是由SOH角色觸發的。請參閱[this](http://www.asciitable.com/) – Thevenin

+6

或簡單地'case'1'' –

+2

case'1' - genious – MoZZ

回答

1

字符0到9實際上是ascii值48到57. switch((int)(c-48))會起作用。 express(int)(c-48)將ascii數字更改爲整數。

+1

避免幻數,使用''0'而不是'48'。 – owacoder

3

由於c被聲明爲具有字符類型,所以輸入1和2是對應於'1'和'2'的字符。

使用字符文字所以寫

switch (c) 
{ 
case '1': 
    printf("%d + %d is %d\n", x, y, x+y); 
    break; 

case '2': 
    printf("%d - %d is %d\n", x, y, x-y); 
    break; 

default: printf("Wrong value\n"); 
    break; 
} 
0

到以前的答案的選擇:

switch(c) 
{ 
    case '1': 
    ... 
    break; 
    ... 
} 

這甚至允許你處理 'Q' 等。

在做「Q」,記住大小寫:

switch(c) 
{ 
    case 'q': 
    case 'Q': 
    ... handle q 
    break; 
} 

簡而言之:您正在閱讀一個字符,把它當作一個字符。