こないだのプログラム実際に組んで実行してみたら、確かにCtrl+Dを入力した時に無限ループに突入しちゃいますね(´□`|||)
調べたらscanfがEOFを返すのは読み込みエラーが発生した場合であり、Ctrl+Dが入力された時ではないそうで(死
となると、0を入力した時に終了するように組み直したほうがいいかなぁ…
というわけで組み直し。
以下新バージョン
---------------------------------------------------
#include $lt;stdio.h>
int days(int);
int main()
{
int m;
while(1) // 無限ループ
{
printf("日数を調べたい月を入力してください(終了する場合は0を入力)");
scanf("%d",&m);
if( (1<=m) && (m<=12) )
printf("%d¥n",days(m));
else if( m==0 )
break; // 0が入力されたら無限ループから脱出
else
printf("入力が不正です¥n"); // 入力が不正な時の処理
}
return 0;
}
int days(int m) // 引数として受け取った月の日数を返す関数
{
switch(m)
{
case 2:
return 28;
case 4:
case 6:
case 9:
case 11:
return 30;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
default: // 念のためエラー処理
return (-1);
}
}
----------------------------------------------------------
例によって例の如く、表示の都合上全角スペースだらけなんで要注意w
これはさすがに正常に動くはず。 |