2014-03-29 269 views
1

我想從用戶年齡,性別(m/f),婚姻狀況(m/u)中提取3個輸入。 我使用char數據類型進行性別和婚姻狀況。這裏是下面的代碼..scanf未按預期工作

#include<stdio.h> 
#include<conio.h> 

main() { 
int age; 
char gender,marital_status; 
printf("Enter your age: "); 
scanf("%d",&age); 
printf("Enter your gender (m/f): ");  
scanf("%c",&gender); 
printf("\nEnter your marital status (m/u): ");  
scanf("%c",&marital_status); 


} 

年齡部分corectly作品,即它需要從用戶的年齡和存儲它的年齡。但在此之後,同時顯示下面的printf語句。如何逐一展示他們,從用戶那裏獲得性別和婚姻狀況的信息。

+0

當'C I/O庫'全部使用時,這個'C++'是如何的? –

+0

輕微:建議上次提示更改「\ n輸入您的婚姻狀態(m/u):」。 (我想知道在「輸入你的性別(m/u)」中有什麼「u」:-) – chux

+0

「u」表示未婚:p – sam

回答

3

這是因爲%c接受'\n'符號,這是從進入年齡時剩下的符號。你會過得更好讀入一個字符串,並採取第一個字符,像這樣:

char buf[2]; 
printf("Enter your gender (m/f): "); 
scanf("%1s", buf); 
gender = buf[0]; 
printf("\nEnter your marital status (m/u): "); 
scanf("%1s", buf); 
marital_status = buf[0]; 

%s格式說明設置爲忽略所有空格。請注意格式說明符中的%之後的一個字符限制。

+0

都存儲在buff [0]位置? – sam

+0

確定它是花花公子..極好:) – sam

+0

'「%1s」'很好,但奇怪爲什麼不建議'「%c」'?也許有一種看不見的見解。 – chux