|
すいません、警告は消えました。
しかし、今度は月の数値が11○○〜や12○○〜といった、前二つの数値がありえる月(10,11,12ですね)の場合、終わらなくなってしまいました。
どう変更したらよろしいでしょうか?
ソースは以下のものです。
#include <stdio.h>
#include <stdlib.h>
#define MAXNAME 11 /* 名前の最大入力文字数 10文字 + '\0' */
#define YEAR 5 /* 生年月日の「年」の形式「YYYY + '\0'」 */
#define MOON 3 /* 生年月日の「月」の形式「MM + '\0'」 */
#define MAXCASE 10 /* 最大ユーザー件数 */
void get_string(char *p_str, int xMaxChar);
struct user
{
char Name[MAXNAME]; /* ユーザ名 */
char Year[YEAR]; /* 年 */
char Moon[MOON]; /* 月*/
};
void main(void)
{
struct user s_user[MAXCASE];
int Manth;
int i, j = 0;
/* データ入力 */
/* 最大件数までループ */
while( j < MAXCASE ){
/* 名前入力 */
printf("名前:");
get_string(s_user[j].Name, MAXNAME);
/* 1文字目が'0'のとき */
if ( s_user[j].Name[0] == '0' ) {
break;
}
/* 改行のみのとき */
if ( s_user[j].Name[0] == '\0' ) {
printf("再入力\n");
continue;
}
/* 生年月日入力 */
printf("年:");
get_string(s_user[j].Year, YEAR);
/* 年の数字チェック */
for (i = 0; i < 4; i++) {
/* 各桁の文字が0~9以外のときエラー */
if( s_user[j].Year[i] < '0' || '9' < s_user[j].Year[i] ){
printf("年の入力形式が正しくありません\n");
exit(-1);
}
}
Manth = 0;
printf("月:");
get_string(s_user[j].Moon, MOON);
/* 月の数字チェック */
for (i = 0; i < 2; i++) {
/* 各桁の文字が0~9以外のときエラー */
if( '0' <= s_user[j].Moon[i] && s_user[j].Moon[i] <= '9' ){
Manth = Manth * 10 + s_user[j].Moon[i] - '0';
}
else{
printf("月の入力形式が正しくありません\n");
exit(-1);
}
}
/* 月のチェック 1月~12月以外ならエラー */
if ( Manth < 1 || 12 < Manth ) {
printf("月の入力形式が正しくありません\n");
exit(-1);
}
printf("累計件数 = %d件\n\n", ++j);
}
printf("\n入力データ表示\n");
/* 3種の入力データ全てを表示 */
for (i = 0; i < j; i++) {
printf("%d件目\n", i + 1);
printf("名前 = %s\n", s_user[i].Name);
printf("生年月日 = %s/%s\n\n", s_user[i].Year , s_user[i].Moon);
}
}
void get_string(char *p_str, int xMaxChar)
{
int i = 0;
int C;
/* iCがEOFか改行が入力されるまでループ */
while ( (C = getchar()) != EOF && C != '\n' ){
/* 入力された文字がiMaxchar文字未満なら下の処理 */
if ( i < xMaxChar - 1 ) {
*p_str = C;
p_str++;
i++;
}
}
*p_str = '\0';
}
|