VC++でプログラムの勉強をしています。クイズ作成で無限ループになってしまう問題について

このQ&Aのポイント
  • VC++でプログラムの勉強をしています。最近はじめたばかりで、While文とif文を使ってクイズを作成しました。しかし、一個目のsinで入力を求めているところから無限ループになってしまいます。cin.cler()とsin.ignore()を試してみましたが効果がありませんでした。どこを間違えているのか教えてください。
  • 質問:VC++でクイズ作成中に無限ループが発生する問題が発生しています。どのように解決すれば良いですか?
  • VC++でプログラムの勉強中にクイズを作成しましたが、一個目のsinで入力を求めているところから無限ループになってしまいます。効果的な解決策を教えてください。
回答を見る
  • ベストアンサー

VC++でプログラムの勉強をしています。

プログラムは最近はじめたばかりです。While文とif文を使ってクイズを作ってみたところ、一個目のsinで入力を求めているところから無限ループになってしまいました。色々調べてcin.cler()とsin.ignore()を入れたりもしてみましたが上手くいきませんでした。どこを間違えているのでしょうか? //クイズ #include <iostream> using namespace std; int main()//cin.clear();cin.ignore();???? { int a; int b; while(1) { cout<<"ネコ型のロボットが出てくるアニメといえば?"<<endl; cout<<"A)ドラえもん B)ドラエもん C)ほりえもん D)サザエさん"<<endl; cin>>a; if(a=='A') { cout<<"ファイナルアンサー?"<<endl; cout<<"Y)Yes N)NO"<<endl; cin>>b; if(b=='Y'){break;} if(b=='N'){cout<<"ゆっくり考えてね!!"<<endl;} if(b!='Y'||'N'){cout<<"正しく入力してね!"<<endl;} } if(a=='B'||'C'||'D') { cout<<"ファイナルアンサー?"<<endl; cout<<"Y)Yes N)NO"<<endl; cin>>b; if(b=='Y'){cout<<"残念!!"<<endl;} if(b=='N'){cout<<"ゆっくり考えてね!!"<<endl;} } if(a!='A'||'B'||'C'||'D'){cout<<"正しく入力してね!"<<endl;} } cout<<"正解!!"<<endl; }

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

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8027/17156)
回答No.1

int a; int b; でよいのかどうか,考え直すこと。 それから if(b!='Y'||'N') f(a=='B'||'C'||'D') if(a!='A'||'B'||'C'||'D') を考え直すこと。 まあ,今のままでも 65 89 と入力すればちゃんと「正解」って出力される。 なぜそうなるのかは,考えてね。

inoue_sinra
質問者

お礼

回答ありがとうございました!! 回答があってから65と89について調べてみたら アスキーコードというのが出てきて よくわからないけどintでは使えなさそってことがわかりました! charにしたらいけました!! これまで代入はintだけでやってたので気が付きませんでした! あとifの所もこれでいけるんじゃないかと思い込んでました ありがとうございました

関連するQ&A

  • 簡単なstringの使い方。

    int main() { char answer[6]; cout <<"あなたは学生ですか?\n"; cin>> answer; //ユーザーはここでYESと入力 if(anser =="YES"){ cout<<"学生証を提出してください。\n"; } return 0; } このようなプログラミングでYESと入力しても "学生証を提出してください。”が出てきません。 もしこれを char answer にしてYとだけ入力するようにすると動きます。 なぜYESと入力するようにするとうまくいかないのか、 どなたかわかる方大至急よろしくお願いします!!

  • C++で二次方程式のプログラム

    大分前に二次方程式のプログラムを作るって問題が出ていました。 しかし、セットで作ったプログラムのフローチャートを書くんですがフローチャートが分かりません。 条件は 虚数解 a=0 実数解 の場合分けをして、解を出すってプログラムなんですが、多分、それ自体は合っていると思います。 しかし、そのフローチャートを書きなさいって問題があったんですが、それが未だに分からないんですが、これをフローチャートに書くとすると、どう書けばいいですか? #include <iostream> #include <cmath> using namespace std; int main() { double a,b,c,d,x0,x1; cout << "aを入力してください\n"; cin >> a; cout << "bを入力してください\n"; cin >> b; cout << "cを入力してください\n"; cin >> c; d=b*b-4*a*c; x0 = (-b + sqrt(d)) / (2 * a); x1 = (-b - sqrt(d)) / (2 * a); if(a==0) { cout << "解は1つで" << -c/b << "です\n"; } else if(d>0) { cout << "解は二つの実数解で,解は" << x0 << "," << x1 << "です\n"; } else { cout << "解は二つの虚数解で,解は" << (-b) / (2 * a) << "+i" << sqrt(-d) / (2 * a) << " , " << (-b) / (2 * a) << "-i" << sqrt(-d) / (2 * a) << "です\n"; } return 0; }

  • VC++で繰り返しの問題ができません

     宿題でVC++を使った演習問題が出ました。問題は『数列の最初の数字が整数xの時、a^0=xである。a^nが偶数の時、a^n+1=a^n/2で、a^nが奇数の時、a^n+1=3*a^n+1となる。また、a^k=1となるkが存在する。xをインプットすると、a^k=1となる整数kと数列a^0, a^1, a^2,……, a^kをアウトプットするプログラムを書け』です。(例えば、x=30と打ち込むと、k=10とa^0=30, a^1=15, a^2=46, a^3=23, ……, a^k=1が出てくるような感じです。)  一応少しは書いたのですが、さっぱりプログラムが動かなくて……。何が良くなくて、どうすれば良いのか教えてくださいませんでしょうか。 #include <iostream> using namespace std; int main() { int i=0; int k=0; int x; int a; cout << "Enter the number: x="; cin >> x; cout << endl; for (a=x;a==1;k++) { if (a%2==0) { a=a/2;} else { a=a*3+1;} } cout << "k=" <<k<<endl; return 0; }

  • icpcの過去問

    問題→ http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1147&lang=jp 自分の回答→ #include <iostream> using namespace std; int numbers[105]; int order(int n,int num){ if(num==0){numbers[0]=n;} else{ for(int i=0;i<num;i++){ if((numbers[num-(i+1)])>n){//cout << "here1"; numbers[num-i]=numbers[num-(i+1)];//cout << "here2"; numbers[num-(i+1)]=n;//cout << "here3"; } } } return 0; }//昇順に並べる int main(){ int n; while(cin>>n,n){ int count,answer; for(int i=0;i<n;i++){int Numb; cin >> Numb;if(i==2){cout << "here";} order(Numb,i); count++; }//昇順に要素が並んだ for(int i=1;i<count-1;i++){ answer += numbers[i]; } answer = answer/(count-2); cout << answer << endl; } } 実行結果→ 3 7 6 5 Bus error となってしまいます。最後の入力の時に、cinされずにbuserrorになるのですがなぜなのでしょうか。

  • javaプログラミング

    以下のプログラムがコンバイルできません なぜでしょうか? #include<iostream> #include<cmath> using namespace std; int main() { double a, b; cout << "実数 a の値を入力してください " << endl; cin >> a; cout << "実数 b の値を入力してください " << endl; cin >> b; cout << a << " の " << b << " 乗は " << pow(a, b) << "です" << endl; return 0; }

    • ベストアンサー
    • Java
  • Yesならこっちへ、NOならあっちへ(c++)

    取り組んでる課題で、Yとタイプしたら1のステップにいけて、Nとタイプしたら2のステップに行くというところでわからなくなってしまいました。Userにそういう選択させるのには何をどう書いたらいいのですか? --------------------------------------------------------------------- 問題:1から100までの整数をUserに選ばせ、Userに、「選んだ数字はXX以上ですか?」と質問を繰り返し、最後にUserの選んだ数字を当てるという課題です。(Userはそれに対してYes/Noでしか答えられません。) --------------------------------------------------------------------- int max=100; int min=0; int mid, x; int systemtype=y, sytemtype=n; main(){ while(1){ cout<<"1から100までで好きな数字を選んでね。"; cin>> x; if (n<=0 || n>=100){ break; } if (mid == (max + min)/2){ cout<<"選んだ数字は :" << mid << " より大きい? "<< endl; cout<<" y は YES, n は NO :" << endl; } else if(min == max){ cout<<"その数字は" << x <<endl; break; } else if(min == mid){ mid += ( max - mid)/2; cout<<"あなたの選んだ数は :" << mid <<" より大きい? "<<endl; } else if(max == mid){ mid -= (mid - min)/2; cout<<"あなたの選んだ数は:" << mid << " より大きい? "<< endl; } else cout<<"その数字は :"<< n <<endl; } return 0; }

  • 配列のプログラムですが

    #include <iostream> using namespace std; int main() { int a[100],b=-9999; int i=0,j; do { cout << "整数値を入力してください\n"; cin >> a[i]; b += a[i]; i++; }while( a[i-1] != 9999); cout << b << '\n'; for(j=0;j<i-1;j=j+1) cout << a[j] * 3 << '\n'; return 0; } このプログラムってどんな計算をしてるんですか?誰か分かる人いますか 整数値を入れてくださいって出るだけなんですが

  • C++のプログラムが走りません。

    <<条件は以下です。>> データメンバ x:xの座標(ただし 0-1000とする) y:yの座標(ただし 0-1000とする) z:zの座標(ただし 0-1000とする) メンバ関数 void setX(int a): xの座標を設計する(範囲外の値は、error messageを出力する) void setY(int b): Yの座標を設計する(範囲外の値は、error messageを出力する) void setZ(int c) Zの座標を設計する(範囲外の値は、error messageを出力する) int getX(): Xの座標値を得る int getY(): Yの座標値を得る int getZ(): Zの座標値を得る << 不明な点は、 if文で、どう戻るかがわからないことと、 最後の結果表示の部分です。 以下が、作成したプログラムです。ネットで検索して類似しているプログラムを参考にしたんですが。 よろしくお願いします。>> #include <iostream> using namespace std; class Zahyou{ private: int getX();//Xの座標値を得る int getY();//Yの座標値を得る int getZ();//Zの座標値を得る int a,b,c; public: void setX(int a);//Xの座標を設計する void setY(int b);//Yの座標を設計する void setZ(int c);//Zの座標を設計する void show(); }; void Zahyou::show(){ cout << "The result is: (" << a << "," << b << "," << c << ")"; } void Zahyou::setX(int a){ cout << " Please Input X " << "\n "; cin >> a ; if(a < 0 && a > 1000){ cout << "The value of X is a mistake, Please input X again! " << " \n "; } } void Zahyou::setY(int b){ cout << "Please Input Y " << "\n "; cin >> b ; if(b < 0 && b > 1000){ cout << "The value of y is a mistake, Please input X again! " << " \n "; cin >> b ; } } void Zahyou::setZ(int c){ cout << " Please Input Z " << "\n "; cin >> c ; if(c < 0 && c > 1000){ cout << "The value of Z is a mistake, Please input X again! " << " \n "; cin >> c ; } } int main(){ Zahyou zahyou1; zahyou1.getX(); zahyou1.getY(); zahyou1.getZ(); zahyou1.show(); return 0; }

  • getlineについて

    現在getlineを用いてプログラムを作成しようとしているのですが、例えば #include <iostream> using std::cin; using std::cout; using std::endl; int main(){ char buffer[81]; while(!cin.eof()){ cin.getline(buffer,sizeof(buffer)); cout << buffer << endl; while((!cin.eof())&&cin.fail()){ cin.clear(); cin.ignore(80,'\n'); } } return 0; } というプログラムを作った場合、標準入力から各行を80文字だけ読み込み出力をするわけなんですが、 この80文字という文字制限をなくしたい場合どういった工夫をすればいいのでしょうか?

  • C++の二次方程式のプログラム

    #include <iostream> #include <cmath> using namespace std; int main() { double a,b,c; cin >> a >> b >> c; if(a==0) { cout << (-c/b) << '\n'; } else if((b*b-4*a*c)<0) { cout << (-b/2/a) << 'i' << sqrt(4*a*c-b*b)/2/a << '\n'; } else { cout << (-b/2/a) << sqrt(4*a*c+b*b)/2/a << '\n'; } return 0; } 最後のelseの下のcoutが本当に分からないんで教えてくださいお願いします。一応この条件(a=0の時、aが0以上の時、aが0以下の時)で出題されてるんですが…