アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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;
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/02/23 23:33

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


(ただしbreak文を多用するとソースがわかりにくくなるという弊害もあります)

それから、
else (条件式)
ではなく、
else if(条件式)
です。お間違えのないよう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/02/23 23:43

まず、scanf_s()の使い方が間違っています。


scanf_s()は最近できた関数でscanf()と使い方がよく似ていますが、
細かい点で違いがあります。注意してください。

ちなみに、普通の関数はパラメータの個数がおかしかったり、
間違ったパラメータを指定するとコンパイラが教えてくれるのですが、
printf()やscanf()などパラメータの個数が決まっていない関数に
ついては教えてくれません。
十分に注意を払って使うようにしましょう
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/02/23 23:42

使えばいいと思うなら使ってみればいい. その結果うまくいかないのであれば, 作ったプログラムを可能ならすべて (できなければ「問題が発生する」小さいプログラムを) 示して,


・期待した動作
・実際の動作
を書いてください.
「上記の途中のプログラムも実行すると変になってしまう」って書いてますけど, コンパイルもできないプログラムでは意味がないし, 期待した動作や実際の動作も分からないので「変」かどうかも判断できません. ついでに言えば「どのコンパイラを使っているのか」も書いてほしいな.
なお, この場合に関して言えば while 使ってもいいけど do~while の方がきれいになるでしょう.
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/02/23 23:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!