• 締切済み

カレンダーの年月入力の判定

現在C言語でカレンダープログラムを書いています。 表示させたい年月を入力するのですが、正しい形で入力されたかの判定プログラムについてご教授いただきたいです。 具体的にはYYYY/MMまたはYYYYMMの形で入力されたかどうかを判定したいと思っています。 どのようなプログラムを書けばよろしいでしょうか。

みんなの回答

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.3

難しく考え過ぎのような。 ・入力された文字が数字(数値ではないです)かどうかの調べ方 ・引数の文字列が1桁の数字かどうかの調べ方 はどうすればいいと思いますか?

momoiropuccho
質問者

補足

>入力された文字が数字(数値ではないです)かどうかの調べ方 数字かどうかはisdigit関数を使って調べると思います。 >引数の文字列が1桁の数字かどうかの調べ方 これは引き取った文字列の長さをstrlen関数で調べるのですか?

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

文字列が「数字が4桁 + 数字が2桁」という形であるかどうかを調べることはできますか? 文字列が「数字が4桁 + '/' + 数字が2桁」という形であるかどうかを調べることはできますか?

momoiropuccho
質問者

補足

お恥ずかしながらその調べる方法さえも分からない状態です。 入力された数字を文字列として扱って、strchrなどで調べたりするのかなと思ったんですが違うっぽいですし・・・ なのでどう組めば良いのかをご教授頂けたら嬉しいです。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

月を厳密にチェックしなくてよいのなら ・数字が4桁 + '/' + 数字が2桁 ・数字が4桁 + 数字が2桁 という文字列の並びか調べればよいのでは? 月を厳密にチェックしたいというのであれば月として許される文字列かどうか調べればいいし。

momoiropuccho
質問者

補足

考え方は分かるのですが、それをどうプログラムに反映するかで悩んでいます。 一応作ってみたんですけど、これを年と月を一度に繋げて入力し、 YYYY/MMまたはYYYYMMの形として判定するかイマイチ思いつかないです。 考え方は分かるのですが、それをどうプログラムに反映するかで悩んでいます。 一応作ってみたんですけど、これを年と月を一度に繋げて入力し、 YYYY/MMまたはYYYYMMの形として判定するかイマイチ思いつかないです。 // 文字列チェック関数 int Check(char str[256], int num) { int i; int str_num; // チェックする文字列の桁数取得 strnum = strlen(str); // 桁数が指定桁で無ければ戻る if( str_num != num ) { return 0; } // 桁数が指定桁であれば続行 else { // 桁数分の文字チェック for( i=0; i; ) { // 文字が0~9でなければfalse if( isdigit(str[i]) == 0 ) { return 0; } } } return 1; } int main() { while(1) { scanf_s("%s", &year, 64); // 入力文字列がYYYYである if( Check(year, 4) == 1 ) { // 月入力チェック scanf_s("%s", &month, 64); // 入力文字列がMMで、1~12である if( Check(month, 2) == 1 && (atoi(month) >= 1 && atoi(month) <= 12) ) { // ここでカレンダー表示の関数を使います。 } // 入力文字列がMMでない else { printf("月を正しく入力してください\n"); } } // 入力文字列がYYYYでない else { printf("年を正しく入力してください\n"); } } }

関連するQ&A