• 締切済み

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

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

みんなの回答

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

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

momoiropuccho
質問者

補足

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

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

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

momoiropuccho
質問者

補足

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

  • wormhole
  • ベストアンサー率28% (1619/5654)
回答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

  • カレンダーの作り方教えてください!

    西暦年と月を入力すると、その年月のカレンダーが出てくる万年カレンダーのC言語プログラムを教えてください! という質問をしたのですが、12か月分一度に表示させるには、どうしたらいいのでしょうか?

  • 万年カレンダーのC言語プログラムを教えてください

    西暦年と月を入力すると、その年月のカレンダーが出てくる万年カレンダーのC言語プログラムを教えてください!お願いします!

  • C言語でカレンダーを作成しています

    こんばんは。 当方プログラミング初心者なのですが、C言語でカレンダーを作成しています。 具体的には年だけ入力すれば一年分のカレンダーが出力され、 年と月を入力すればその年月のカレンダーが出力されるようなプログラムを作りたいと思っています。 例えば2011年と入力すれば2011年一年分のカレンダーが表示され、 2011年2月と入力すれば2011年2月一月分のカレンダーが表示されるといった感じです。 また、年を入力しなかった場合はエラーメッセージを返すようにしたいと考えています。 プログラムの概要は以下のようなものを考えてます。 scanfで年月を入力 if(年だけ入力すれば) 一年分のカレンダーを表示 if else(年月両方を入力すれば) 一ヶ月分のカレンダーを表示 else(それ以外) エラーメッセージ カレンダーを表示するプログラムは完成したのですが、if文の中身をどのようにすればいいのかわかりません。 良い案がありましたら、ご教示お願い致します!

  • 入力した期間の年月を求めたい。

    VB2005、FlexGrid.NET環境です。 フォームにDateTimePickerが2つあり、そこに入力した期間の ぶんだけ、Gridに列を作りたいと思ってます。 具体的には、2つのコントロールにそれぞれ2005/01/01、 2006/01/01と入力した場合、2005/01、2005/02、2005/03…2006/01 まで、入力した間の具体的な年月を求めて、それをヘッダとして Gridに列追加したいのです。 前回質問させていただいて、単純に列だけを追加することは 出来ましたが、ヘッダに入力する年月をどう作るか悩んでいます。 ご教授いただけないでしょうか?

  • C言語でのカレンダー作成

    今、C言語でカレンダーを表示させるプログラムを作成しています 西暦と月を入力すると、その年、その月の1ヶ月分のカレンダーが表示されるプログラムを作りました そこで、次は入力した月から3ヶ月分のカレンダーを表示させるプログラムを作成したいのですが、どなたか教えてくださいませんか? 配列を使う方法や文字列など色々な方法があると伺って、どの方法が作りやすいのかわからないんです・・・ borland c を使用しています

  • カレンダーのC言語プログラムを教えてください!

    西暦年と月を入力すると、その年月のカレンダーが出てくる万年カレンダーのC言語プログラムを教えてください! その出力結果が 2***年 *月 月 火 水 木 金 土 日 月 火 水 木 金 土 日 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 というように二週間ごとに表示するもので、 うるう年の判別ができるものになるようにしたいのですが。 年=n月=g で入力するものを作りたいんです。 よろしくお願いします!!!(>_<)

  • 入力された年月からその月の末日を取得する

    import java.util.*; class Sample { public static void main(String[] args) { System.out.println(args[0]); Calendar cal = Calendar.getInstance(); cal.set(2000,1,1); int y = cal.get(Calendar.YEAR); int m = cal.get(Calendar.MONTH) + 1; int last = cal.getActualMaximum(Calendar.DATE); System.out.print(y + "年" + m + "月の末日は "); System.out.println(last + "日です"); } } で、2000年2月の末日を取得することが出来るのはわかったのですが プログラム上で年月の入力を促してその月の末日を取得するにはどうすればいいのでしょうか? (プログラム実行例) C:\JAVA\SAMPLE>java Sample 2009 2 2009年2月の末日は 28です ↑のようにプログラム上で年 月を入力して実行し、末日を取得したいのですが・・・ 多分この場合、入力数値などに対する例外処理や閏年の処理などもやらないとダメだと思いますがよくわかりません

    • ベストアンサー
    • Java
  • テキストボックスの入力チェック。

    Version 6.0 です。 テキストボックスに入力された値の中に任意の文字があるかどうかを判断する関数というのはあるでしょうか?InStrとかでやってみたのですが、If文を繰り返すことになってしまい、見難い状況です。 2つのテキストボックスに年月を入力させ、 "yyyymm"、"yyyym"、"yyyy/mm"、"yyyy/m" が入力可。入力した文字列に"/"があるかないかを判断し、あればそのままでIsDateでチェック。なければ、"/"を入れてIsDateでチェック、とさせたいです。 何か簡単なコードの書き方等あれば、ぜひ教えてください。分かり難いところがあれば、補足します。よろしくお願いします。

  • 全角での数字入力 IN カレンダープログラム

    UNIX・C言語環境でカレンダープログラムを作成しております。 全部うまくいき、エラーの制御をしています。 その際、全角を入力させると場合によって、プログラムが終了したり永久ループにはまってしまいます。 入力を半角だけにする方法、全角だとエラーだと認識させる方法はありますでしょうか? ご存知の方、教えてください。

  • 別ウィンドウでカレンダーを表示させ、その値を元のウィンドウのテキストボックス等にデータを渡す方法とか可能でしょうか?

    現在、PHPで、テキストボックスに日付を入力し、MySQLへ登録するプログラムを考えているのですが、 直接キーボードから入力だと面倒(YYYY/MM/DD HH:SS)(例:2005/02/02 09:51)なので、テキストボックスの側にカレンダーを表示させるボタンを設け、 そのボタンを押すと、少し小さめな別ウィンドウでカレンダー、時刻が表示されており、(そのウィンドウを開いたときは開いたときの月日時刻を表示させておく) カレンダーの月は翌月、前月を表示させるボタンがあり、また、その真ん中にボタンをひとつ配置し、そのボタンを入力すると、現在日時にあわすことができます。 日にちは、カレンダーの日にちの枠内をクリックすれば日にちを設定でき、時間と分はそれぞれプルダウンで対応したいと思います。 そして、最終的に決定ボタンを入力すると自動的にカレンダーのウィンドウを閉じ、テキストボックスに日付時刻を入力させたいのですが、 どうやって作っていけばいいのか、よくわかりません。多少JavaScriptを使うのかな?とか思っているのですが。 具体的なプログラムとか教えていただけないでしょうか。 よろしくお願いいたします!!!

    • ベストアンサー
    • PHP

専門家に質問してみよう