• ベストアンサー

まだ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が入力されるまで質問を繰り返すとなるようにしたいのです。 上記の途中のプログラムも実行すると変になってしまうので上記の修正も兼ね、わかる方はご指導よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.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; }

epare
質問者

お礼

助かります。ありがとうございました。

その他の回答 (3)

回答No.3

while文で無限ループを作っておき(条件式として常に成り立つものを書く)、入力された値が適切だった場合にbrekで抜けるというのがプログラムの書きやすさを考えるなら良いかと思います。 (ただしbreak文を多用するとソースがわかりにくくなるという弊害もあります) それから、 else (条件式) ではなく、 else if(条件式) です。お間違えのないよう。

epare
質問者

お礼

ご指摘ありがとうございました。これからも参考にさせていただきます。

  • BLK314
  • ベストアンサー率55% (84/152)
回答No.2

まず、scanf_s()の使い方が間違っています。 scanf_s()は最近できた関数でscanf()と使い方がよく似ていますが、 細かい点で違いがあります。注意してください。 ちなみに、普通の関数はパラメータの個数がおかしかったり、 間違ったパラメータを指定するとコンパイラが教えてくれるのですが、 printf()やscanf()などパラメータの個数が決まっていない関数に ついては教えてくれません。 十分に注意を払って使うようにしましょう

epare
質問者

お礼

scanfの違い、使い方に注意していこうかと思います。勉強になりました。ありがとうございました。

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

使えばいいと思うなら使ってみればいい. その結果うまくいかないのであれば, 作ったプログラムを可能ならすべて (できなければ「問題が発生する」小さいプログラムを) 示して, ・期待した動作 ・実際の動作 を書いてください. 「上記の途中のプログラムも実行すると変になってしまう」って書いてますけど, コンパイルもできないプログラムでは意味がないし, 期待した動作や実際の動作も分からないので「変」かどうかも判断できません. ついでに言えば「どのコンパイラを使っているのか」も書いてほしいな. なお, この場合に関して言えば while 使ってもいいけど do~while の方がきれいになるでしょう.

epare
質問者

お礼

ご指導通りdo whileにしたらきれいにまとまりました。ありがとうございました。

関連するQ&A