- 締切済み
練習用プログラムを編集したいのですが・・・。下の男性か女性かを識別する
練習用プログラムを編集したいのですが・・・。下の男性か女性かを識別するプログラムに、処理を繰り返し実行し、[Ctrl+Z]が入力された時点で繰り返し処理を終了する機能を付けるにはどうしたらいいでしょうか。 また、実行例のように、入力男性数、入力女性数、総数を表示させたいです。 回答よろしくお願いします。 //『プログラム』 #include <stdio.h> int main(void) { int sx; printf("男性なら1を、女性なら2を入力してください:"); scanf("%d", &sx); printf("%d\n", sx); //確認用 while(sx!=1 && sx!=2) //条件 { printf("範囲外の入力です。再入力をしてください。\n"); printf("男性なら1を、女性なら2を入力してください:"); scanf("%d", &sx); printf("%d\n", sx); //確認用 } if(sx==1) printf("男性ですね。\n"); else printf("女性ですね。\n"); return 0; } ************************************************************** 『実行例』 男性なら1を、女性なら2を入力してください(終了は[Ctrl+Z]):1 男性なら1を、女性なら2を入力してください(終了は[Ctrl+Z]):3 範囲外の入力です。再入力をしてください。 男性なら1を、女性なら2を入力してください(終了は[Ctrl+Z]):4 範囲外の入力です。再入力をしてください。 男性なら1を、女性なら2を入力してください(終了は[Ctrl+Z]):2 男性なら1を、女性なら2を入力してください(終了は[Ctrl+Z]):^Z 最終結果: 男性数1 女性数1 総数2
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- aurumnet
- ベストアンサー率43% (51/117)
>4 そだね そうしたほうがいいかも あと 試してないのでまちがってたらごめんなさい 見直してみてきづいたのは 入力時のエンターキー処理入れ忘れてるくらいかな・・・
- Tacosan
- ベストアンサー率23% (3656/15482)
「getchar の返り値は int にしろ」って, いたるところでいわれてると思う>#3.
- aurumnet
- ベストアンサー率43% (51/117)
while抜ける条件を入力キー=EOFにしたらいけるかと 以下サンプル #include <stdio.h> int main(void) { int boy,girl; char k_in; boy=0; girl=0; k_in='0'; printf("男性なら1、女性なら2を入力"); while( k_in != EOF) //条件 { k_in=getchar(); switch(k_in){ case '1' : boy ++; printf("男性です"); break; case '2' : girl++; printf("女性性です"); break; default : printf("範囲外の入力です。再入力をしてください。"); break; } printf("男性数%d 女性数%d 総数%d ",boy,girl,boy+girl); } printf("最終結果:男性数%d 女性数%d 総数%d ",boy,girl,boy+girl); return 0; }
- Tacosan
- ベストアンサー率23% (3656/15482)
あと, 誤入力したときに痛いことになるのでその回避も追加してください.
- Yanch
- ベストアンサー率50% (114/225)
scanf のマニュアルに載ってますよ。 Ctrl+Z を検出するなら、 scanf の戻り値を見て、EOF が戻ってきているか調べましょう。 http://msdn.microsoft.com/ja-jp/library/9y6s16x1%28VS.80%29.aspx