正しく入力できないのです
Posted: 2010年10月09日(土) 15:24
生年月日を入力してそれをメッセージボックスで表示するプログラムなのですが、正しく入力できないことがあります
月で1桁の月を入力した時に日が1桁しか入力できなかったり、1桁の日を入力した時に年齢が1桁しか入力できなくなってしまいます
1桁入力するときに01とすると次も2桁入力できるみたいですが、そのようなことをしなくても2桁入力できるようにしたいと思っています
私は高校でC言語を学んでいる最中ですが、WindowsCはまだ数ヶ月しか学んでいません
生年月日や年齢を使って占いのようなものを作り、文化祭で発表しようと思ってますのでどうかよろしくお願いします
見落としておりました、申し訳ありません
http://detail.chiebukuro.yahoo.co.jp/qa ... 1148365286
Yahoo知恵袋でも質問しておりますが、どうかよろしくお願いします
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
static int check = 0 , sFlag = 0 , century , month , day , age;
int id , len = 0;
static char str[12];
char outstr[300] , mes_str[256] , mes_str2[256];
HDC hdc;
PAINTSTRUCT ps;
switch(msg){
case WM_CREATE:
memset(str , 0 , sizeof(str));
memset(outstr , 0 , sizeof(outstr));
memset(mes_str , 0 , sizeof(mes_str));
break;
case WM_CHAR:
len = strlen(str);
if(wp == VK_RETURN && len != 0){
memset(str , 0 , sizeof(str));
sFlag++;
}
str[len] = wp;
if(sFlag == 0){
century = atoi(str);
}
if(sFlag == 1){
month = atoi(str);
}
if(sFlag == 2){
day = atoi(str);
}
if(sFlag == 3){
age = atoi(str);
}
InvalidateRect(hWnd , NULL , TRUE);
break;
case WM_PAINT:
hdc = BeginPaint(hWnd , &ps);
wsprintf(mes_str , "初めに誕生年を入力してくださ
い");
TextOut(hdc , 300 , 20 , mes_str , (int)strlen
(mes_str));
if(century != 0){
wsprintf(outstr , "年:%d" , century);
TextOut(hdc , 385 , 40 , outstr , (int)
strlen(outstr));
}
if(sFlag > 0){
memset(mes_str , 0 , sizeof(mes_str));
wsprintf(mes_str , "続いて誕生月を入力し
てください");
TextOut(hdc , 300 , 60 , mes_str ,
(int)strlen(mes_str));
if(month != 0){
wsprintf(outstr , "月:%d" ,
month);
TextOut(hdc , 395 , 80 , outstr
, (int)strlen(outstr));
}
}
if(sFlag > 1){
memset(mes_str , 0 , sizeof(mes_str));
wsprintf(mes_str , "続いて誕生日を入力し
てください");
TextOut(hdc , 300 , 100 , mes_str ,
(int)strlen(mes_str));
if(day != 0){
wsprintf(outstr , "日:%d" ,
day);
TextOut(hdc , 395 , 120 , outstr
, (int)strlen(outstr));
}
}
if(sFlag > 2){
memset(mes_str , 0 , sizeof(mes_str));
wsprintf(mes_str , "最後に現年齢を入力し
てください");
TextOut(hdc , 300 , 140 , mes_str ,
(int)strlen(mes_str));
if(age != 0){
wsprintf(outstr , "年齢:%d" ,
age);
TextOut(hdc , 385 , 160 , outstr
, (int)strlen(outstr));
}
}
if(sFlag > 3){
memset(mes_str , 0 , sizeof(mes_str));
if(month < 1 || month > 12){
strcat(mes_str , "1年はは1~12月
までです\n");
check = 1;
}
if(month == 4 || month == 6 || month ==
9 || month == 11){
if(day < 1 || day > 30){
wsprintf(mes_str2 , "%d
月は1~30日までです\n" , month);
strcat(mes_str ,
mes_str2);
check = 1;
}
}
if(month == 1 || month == 3 || month ==
5 || month == 7 || month == 8 || month == 10 || month == 12){
if(day < 1 || day > 31){
wsprintf(mes_str2 , "%d
月は1~30日までです\n" , month);
strcat(mes_str ,
mes_str2);
check = 1;
}
}
if(check == 0){
wsprintf(mes_str , "%d年%d月%d日生まれ %d歳" , century ,
month , day , age);
}
id = MessageBox(hWnd , mes_str , "確認"
, MB_YESNO | MB_ICONQUESTION);
if(id == IDNO){
sFlag = 0;
}
}
EndPaint(hWnd , &ps);
break;
月で1桁の月を入力した時に日が1桁しか入力できなかったり、1桁の日を入力した時に年齢が1桁しか入力できなくなってしまいます
1桁入力するときに01とすると次も2桁入力できるみたいですが、そのようなことをしなくても2桁入力できるようにしたいと思っています
私は高校でC言語を学んでいる最中ですが、WindowsCはまだ数ヶ月しか学んでいません
生年月日や年齢を使って占いのようなものを作り、文化祭で発表しようと思ってますのでどうかよろしくお願いします
見落としておりました、申し訳ありません
http://detail.chiebukuro.yahoo.co.jp/qa ... 1148365286
Yahoo知恵袋でも質問しておりますが、どうかよろしくお願いします
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
static int check = 0 , sFlag = 0 , century , month , day , age;
int id , len = 0;
static char str[12];
char outstr[300] , mes_str[256] , mes_str2[256];
HDC hdc;
PAINTSTRUCT ps;
switch(msg){
case WM_CREATE:
memset(str , 0 , sizeof(str));
memset(outstr , 0 , sizeof(outstr));
memset(mes_str , 0 , sizeof(mes_str));
break;
case WM_CHAR:
len = strlen(str);
if(wp == VK_RETURN && len != 0){
memset(str , 0 , sizeof(str));
sFlag++;
}
str[len] = wp;
if(sFlag == 0){
century = atoi(str);
}
if(sFlag == 1){
month = atoi(str);
}
if(sFlag == 2){
day = atoi(str);
}
if(sFlag == 3){
age = atoi(str);
}
InvalidateRect(hWnd , NULL , TRUE);
break;
case WM_PAINT:
hdc = BeginPaint(hWnd , &ps);
wsprintf(mes_str , "初めに誕生年を入力してくださ
い");
TextOut(hdc , 300 , 20 , mes_str , (int)strlen
(mes_str));
if(century != 0){
wsprintf(outstr , "年:%d" , century);
TextOut(hdc , 385 , 40 , outstr , (int)
strlen(outstr));
}
if(sFlag > 0){
memset(mes_str , 0 , sizeof(mes_str));
wsprintf(mes_str , "続いて誕生月を入力し
てください");
TextOut(hdc , 300 , 60 , mes_str ,
(int)strlen(mes_str));
if(month != 0){
wsprintf(outstr , "月:%d" ,
month);
TextOut(hdc , 395 , 80 , outstr
, (int)strlen(outstr));
}
}
if(sFlag > 1){
memset(mes_str , 0 , sizeof(mes_str));
wsprintf(mes_str , "続いて誕生日を入力し
てください");
TextOut(hdc , 300 , 100 , mes_str ,
(int)strlen(mes_str));
if(day != 0){
wsprintf(outstr , "日:%d" ,
day);
TextOut(hdc , 395 , 120 , outstr
, (int)strlen(outstr));
}
}
if(sFlag > 2){
memset(mes_str , 0 , sizeof(mes_str));
wsprintf(mes_str , "最後に現年齢を入力し
てください");
TextOut(hdc , 300 , 140 , mes_str ,
(int)strlen(mes_str));
if(age != 0){
wsprintf(outstr , "年齢:%d" ,
age);
TextOut(hdc , 385 , 160 , outstr
, (int)strlen(outstr));
}
}
if(sFlag > 3){
memset(mes_str , 0 , sizeof(mes_str));
if(month < 1 || month > 12){
strcat(mes_str , "1年はは1~12月
までです\n");
check = 1;
}
if(month == 4 || month == 6 || month ==
9 || month == 11){
if(day < 1 || day > 30){
wsprintf(mes_str2 , "%d
月は1~30日までです\n" , month);
strcat(mes_str ,
mes_str2);
check = 1;
}
}
if(month == 1 || month == 3 || month ==
5 || month == 7 || month == 8 || month == 10 || month == 12){
if(day < 1 || day > 31){
wsprintf(mes_str2 , "%d
月は1~30日までです\n" , month);
strcat(mes_str ,
mes_str2);
check = 1;
}
}
if(check == 0){
wsprintf(mes_str , "%d年%d月%d日生まれ %d歳" , century ,
month , day , age);
}
id = MessageBox(hWnd , mes_str , "確認"
, MB_YESNO | MB_ICONQUESTION);
if(id == IDNO){
sFlag = 0;
}
}
EndPaint(hWnd , &ps);
break;
