- 締切済み
カレンダーの年月入力の判定
現在C言語でカレンダープログラムを書いています。 表示させたい年月を入力するのですが、正しい形で入力されたかの判定プログラムについてご教授いただきたいです。 具体的にはYYYY/MMまたはYYYYMMの形で入力されたかどうかを判定したいと思っています。 どのようなプログラムを書けばよろしいでしょうか。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- wormhole
- ベストアンサー率28% (1626/5665)
難しく考え過ぎのような。 ・入力された文字が数字(数値ではないです)かどうかの調べ方 ・引数の文字列が1桁の数字かどうかの調べ方 はどうすればいいと思いますか?
- Tacosan
- ベストアンサー率23% (3656/15482)
文字列が「数字が4桁 + 数字が2桁」という形であるかどうかを調べることはできますか? 文字列が「数字が4桁 + '/' + 数字が2桁」という形であるかどうかを調べることはできますか?
補足
お恥ずかしながらその調べる方法さえも分からない状態です。 入力された数字を文字列として扱って、strchrなどで調べたりするのかなと思ったんですが違うっぽいですし・・・ なのでどう組めば良いのかをご教授頂けたら嬉しいです。
- wormhole
- ベストアンサー率28% (1626/5665)
月を厳密にチェックしなくてよいのなら ・数字が4桁 + '/' + 数字が2桁 ・数字が4桁 + 数字が2桁 という文字列の並びか調べればよいのでは? 月を厳密にチェックしたいというのであれば月として許される文字列かどうか調べればいいし。
補足
考え方は分かるのですが、それをどうプログラムに反映するかで悩んでいます。 一応作ってみたんですけど、これを年と月を一度に繋げて入力し、 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"); } } }
補足
>入力された文字が数字(数値ではないです)かどうかの調べ方 数字かどうかはisdigit関数を使って調べると思います。 >引数の文字列が1桁の数字かどうかの調べ方 これは引き取った文字列の長さをstrlen関数で調べるのですか?