操作性はご愛嬌ですが、なんとか見れるとこまできました。
が、ここでまた詰まりまして。
最初に表示される「MENU」、操作を選ぶときに「m」と入力すると
表示されるようにしたいのですが。
どうすればいいでしょうか?
操作の方に「m」は作ってあるんですが、どうしようかと・・・
int main(void)
{
int state = INPUT_YEAR;
char n = 0;
FILE *fp;
if( (fp = fopen("Calendar.txt", "a") ) == NULL) /* 起動時にメモ帳を新規作成する */
{
printf("Calendar.txtが開けません\n");
getchar();
exit(EXIT_FAILURE);
}
fclose(fp);
printf("\n***********メモ機能付きカレンダー************\n\n");
printf("* * * * * * * * * M E N U * * * * * * * * * *\n");
printf("* (注)スペース等は入力しないでください *\n");
printf("* *\n");
printf("* 最初から入力の場合は 「s」を入力 *\n");
printf("* 前に戻りたい場合は 「b」を入力 *\n");
printf("* 次の処理に行くには 「g」を入力 *\n");
printf("* メニューの表示には 「m」を入力 *\n");
printf("* カレンダーの確認は 「c」を入力 *\n");
printf("* プログラムの終了は 「x」を入力 *\n");
printf("* * * * * * * * * * * * * * * * * * * * * * *\n\n");
while( 1 ) /* M E N Uのループ */
{
switch( state ) /* switchで状態別の処理 */
{
/*==============================================================*/
/* 西暦の入力 */
/*==============================================================*/
case INPUT_YEAR:
while(1)
{
printf("西暦を入力してください(1970年から2038年まで有効)>>");
scanf("%d",&year);
fflush(stdin);
if((year > 1969) && (year < 2039))
{
state = select_1(MENU,INPUT_YEAR,INPUT_YEAR,INPUT_MONTH,ERROR,END,ERROR); /*状態によりMENU操作(前)へ*/
break;
}
else
{
error(year);
continue;
}
}
break;
/*==============================================================*/
/* 月の入力 */
/*==============================================================*/
case INPUT_MONTH:
while(1)
{
printf("月を入力してください(1月から12月まで有効)>>");
scanf("%d", &month);
fflush(stdin);
if((month > 0) && (month < 13))
{
state = select_1(MENU,INPUT_YEAR,INPUT_YEAR,CALENDAR,ERROR,END,ERROR); /*MENU操作カレンダー(前)へ*/
break;
}
else
{
error(month);
continue;
}
}
break;
/*==============================================================*/
/* カレンダーの表示 */
/*==============================================================*/
case CALENDAR:
while(1)
{
int i, e, w;
w = week_of_day(year, month, 1); /* 1日の曜日を求める */
e = month_last_day(year, month); /* 月の最終日を求める */
printf(" ******%d年%d月*****\n", year, month);
printf(" 日 月 火 水 木 金 土\n");
printf(" --------------------\n");
for (i = 1; i <= w; i++) /* 1日まで空白で埋める */
{
printf(" ");
}
for (i = 1; i <= e; i++) /* 最終日まで表示 */
{
printf(" %2d", i);
if ( (i + w) % 7 == 0) /* 土曜日で改行 */
{
putchar('\n');
}
}
printf("\n--------------------\n");
if(state == 3)
{
state = select_2(MENU,INPUT_YEAR,INPUT_MONTH,READ_OR_WRITE,CALENDAR,END,ERROR); /*MENU操作カレンダー(後)へ*/
break;
}
else
{
error(calendar);
continue;
}
}
break;
/*==============================================================*/
/* Read/Writeの選択(未) */
/*==============================================================*/
case READ_OR_WRITE:
break;
}
}
return 0;
}
メニュー操作はこちらです。
/*==============================================================*/
/* 「M E N U」の操作、カレンダー(前) */
/*==============================================================*/
int select_1(int selm,int sels,int selb,int selg,int selc,int selx,int sele)
{
while(1)
{
char n=0,str[256];
printf("操作を「M E N U」から選んでください>>");
scanf("%255[^\n]%*[^\n]",str);
getchar();
if(strlen(str) == 1)
{
n = str[0];
}
if(n =='m')
{
return selm;
}
else if(n == 's')
{
return sels;
}
else if(n == 'b')
{
return selb;
}
else if(n == 'g')
{
return selg;
}
else if(n == 'c')
{
printf("**************ERROR*************\n");
printf("西暦と月の入力が完了していません\n");
continue;
}
else if(n == 'x')
{
return selx;
}
else
{
printf("**********ERROR***********\n");
printf("不適切な値が入力されました\n");
continue;
}
break;
}
return 0;
}