2017-09-24 70 views
2

我試圖代碼非常簡單的代碼,在這裏它是:築巢「如果」語句不工作

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

int main() 
{ 
    int age; 
    char gender; 

    printf("How old are you? \n"); 
    scanf("%d", &age); 

    printf("What is your gender? (m/f) \n"); 
    scanf("%c", &gender); 

    if ((age >= 18 && gender == 'm')){ 
     printf("You may enter this website "); 

     if (age <= 20) 
     { 
      printf("dude."); 
     } 
    } 

    if ((age >= 18 && gender == 'f')) { 
     printf("You may enter this website "); 

     if (age <= 20) 
     { 
      printf("young lady."); 
     } 
    } 
    else if (age < 18) 
    { 
     printf("Nothing to see here! \n"); 
    } 
    return 0; 
} 

在上面的代碼中,我試圖用一個嵌套if聲明。但它不起作用,並非如我所願。進入這個年齡後,它會打印出這個句子:你的性別是什麼? (M/F)。

當第二個句子打印出來時,它終止。但我不知道爲什麼。 我希望用戶能夠輸入性別,並根據輸入的性別和年齡,打印出一個句子。

你能給我一個提示嗎?

+0

一個''一個聲明if'塊將裏面做之開關語句... – t0mm13b

+1

我投票關閉此問題作爲題外話,因爲類似的問題在這裏回答了100000次。 OP沒有顯示任何調試工作 - 足以在第二次scanf和** think **之後查看變量中的內容。發佈這個問題應該是最後的手段,而不是第一個 –

回答

0

更換scanf("%c", &gender)scanf(" %c", &gender)

0

沒有什麼不對您的代碼的邏輯,所以,你看到的行爲的最可能的原因是該行:

scanf("%c", &gender); 

由於線路如下閱讀int,保留在緩衝區中的'\n'立即被分配到gender

if (age >= 18){ 
    printf("You may enter this website "); 
    if (age <= 20) { 
     printf("%s.\n", gender == 'm' ? "dude" : "young lady"); 
    } 
} 
0

這是因爲:

scanf(" %c", &gender); 

您還可以通過將幾張支票有所減少代碼:

您可以通過在%c前面添加一個空格忽略換行符解決這個問題當你輸入你的年齡並按回車鍵時,你的年齡將被存儲在年齡變量中,但是'\ n'(輸入鍵)仍然存在於緩衝區中,將被性別讀取。 所以,你可以做這些事情 -

scanf("%d\n",&age) 

或 使用

scanf("%d", &age); 
getchar();