- ベストアンサー
まだ1年生の初心者です。ご指導よろしくお願いします。
YとN以外の入力が来ても先に進まないプログラムを作成する。という問題で、 #include <stdio.h> int main(void) { char a; printf("計算しますか?>"); scanf_s("%c", &a); if (a=='Y') { printf("はい\n"); } else (a=='N'); { printf("いいえ\n"); } までやったのですが先がわかりません。たぶん繰り返しのwhileを使えばいいと思うのですが・・・。 ちなみに、 実行すると 計算しますか?>p 計算しますか?>r 計算しますか?>Y はい。 というようにYかNが入力されるまで質問を繰り返すとなるようにしたいのです。 上記の途中のプログラムも実行すると変になってしまうので上記の修正も兼ね、わかる方はご指導よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでしょうか? #include <stdio.h> int main() { char a[2]; while (scanf("%1[YN]", a) < 1) scanf("%*[^\n]%*c"); if (*a == 'Y') printf("はい\n"); else printf("いいえ\n"); return 0; }
その他の回答 (3)
- piro19820122
- ベストアンサー率38% (256/672)
while文で無限ループを作っておき(条件式として常に成り立つものを書く)、入力された値が適切だった場合にbrekで抜けるというのがプログラムの書きやすさを考えるなら良いかと思います。 (ただしbreak文を多用するとソースがわかりにくくなるという弊害もあります) それから、 else (条件式) ではなく、 else if(条件式) です。お間違えのないよう。
お礼
ご指摘ありがとうございました。これからも参考にさせていただきます。
- BLK314
- ベストアンサー率55% (84/152)
まず、scanf_s()の使い方が間違っています。 scanf_s()は最近できた関数でscanf()と使い方がよく似ていますが、 細かい点で違いがあります。注意してください。 ちなみに、普通の関数はパラメータの個数がおかしかったり、 間違ったパラメータを指定するとコンパイラが教えてくれるのですが、 printf()やscanf()などパラメータの個数が決まっていない関数に ついては教えてくれません。 十分に注意を払って使うようにしましょう
お礼
scanfの違い、使い方に注意していこうかと思います。勉強になりました。ありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
使えばいいと思うなら使ってみればいい. その結果うまくいかないのであれば, 作ったプログラムを可能ならすべて (できなければ「問題が発生する」小さいプログラムを) 示して, ・期待した動作 ・実際の動作 を書いてください. 「上記の途中のプログラムも実行すると変になってしまう」って書いてますけど, コンパイルもできないプログラムでは意味がないし, 期待した動作や実際の動作も分からないので「変」かどうかも判断できません. ついでに言えば「どのコンパイラを使っているのか」も書いてほしいな. なお, この場合に関して言えば while 使ってもいいけど do~while の方がきれいになるでしょう.
お礼
ご指導通りdo whileにしたらきれいにまとまりました。ありがとうございました。
お礼
助かります。ありがとうございました。