2017-10-21 151 views
1

如何在C編程中控制char類型的用戶輸入?如何在C編程中控制'char'類型的用戶輸入?

問題:如果用戶給 '男性' 作爲第一個輸入,則程序也沒問給 '年齡'

輸出

輸入性別(男/女):男

輸入年齡:

你的性別是男(M)

ÿ我們的年齡:71 //垃圾值

#include <stdio.h> 

int main() 
{ 
    char gender; 
    int age; 

    printf("\nEnter gender(M/F):"); 
    scanf("%c", &gender); 

    printf("\nEnter age:"); 
    scanf("%d", &age); 

    if(gender=='M'){ 
     printf("\nYour Gender is Male(%c)",gender); 
    }else{ 
     printf("\nYour Gender is not Male(%c)",gender); 
    } 

    printf("\nYour Age a:%d",age); 

    return 0; 
} 

期望輸出:如果用戶輸入給「男」 /「女」 /「M」 /「F」然後按下回車鍵 那麼控制檯會問給年齡

輸入性別(男/女):男

輸入年齡:23​​

你的性別是男(M)//在&性別

基地

您的年齡:23​​

+1

C = C++。只使用您正在使用的語言標記,除非兩者實際相關。 – tambre

+2

我建議你每次使用它時檢查'scanf' *的返回值*。如果您輸入**男**並閱讀一個字符,當您嘗試掃描整數時,您認爲會讀取什麼? –

+0

在哪個操作系統上?見[這](https://stackoverflow.com/a/46763120/841108) –

回答

-2

使用gets()或char數組和Strcmp()來比較字符串。

#include <stdio.h> 
#include <string.h> 

int main() 
{ 

char gender[40]; 
int age; 

printf("\nEnter gender(M/F):"); 
gets(gender); 

printf("\nEnter age:"); 
scanf("%d", &age); 

if(gender=="M" || (strcmp(gender, "Male")==0)){ 
    printf("\nYour Gender is Male(%s)",gender); 
}else{ 
    printf("\nYour Gender is not Male(%s)",gender); 
} 

printf("\nYour Age a:%d",age); 

return 0; 
} 
+2

'gets'是如此不安全並且容易受緩衝區溢出的影響,它已從C11標準中刪除。永遠不要使用'gets'。改用'fgets'。 (也就是說,我讚賞你的建議,使用* line oriented *輸入函數而不是* formatted input *函數) –

+0

'gender ==「M」'==>'gender [0] =='M''最好不要混用你的輸入法。 –

1

你想讀一螫人,但您使用的字符,所以更改您的代碼如下:

char gender[7]; 
scanf("%6s", gender); 
... 
if (gender[0] == 'm' || gender[0] == 'M') 
    printf("\nYour Gender is Male(%c)", gender[0]); 
... 

解決方法二:

只需使用fgets()性別,因爲你想能夠讀取一個字符串,然後scanf()年齡,如下所示:

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

int main() 
{ 
    char gender[7]; 
    printf("Enter gender(M/F): "); 
    if (!(fgets(gender, sizeof(gender), stdin) != NULL)) { 
     fprintf(stderr, "Error reading Gender.\n"); 
     exit(1); 
    } 
    gender[strcspn(gender, "\n")] = 0; 
    int age; 
    printf("\nEnter age:"); 
    scanf("%d", &age); 

    if (gender[0] == 'm' || gender[0] == 'M') 
     printf("\nYour Gender is Male(%c)", gender[0]); 
    else if (gender[0] == 'f' || gender[0] == 'f') 
     printf("\nYour Gender is Female(%c)", gender[0]); 
    else 
     printf("Unrecocognized gender\n"); 
    printf("\nYour Age is: %d\n",age); 

    return 0; 
} 

輸出:

Enter gender(M/F): f 
Enter age: 25 
Your Gender is Female(f) 
Your Age is: 25 
+0

在這種情況下性別變量需要是一個字符型數組 –

+0

正確@ H.M.MOHIDULISLAMSHOVON,就像我的答案一樣。 =) – gsamaras

+0

@ H.M.MOHIDULISLAMSHOVON你給出的輸入是「男」而不是「M」。 –