プログラムの進行が一時ストップしません

このQ&Aのポイント
  • C++のプログラムでcin.sync()とcin.get()でプログラムの進行を一時停止させる方法について質問です。
  • プログラムを実行すると、指定した箇所でプログラムが一時停止しません。
  • 原因を特定することができず、解決方法を知りたいです。
回答を見る
  • ベストアンサー

プログラムの進行が一時ストップしません

void Taiketu_basyo::taiketu() { int iti,kougeki; //一時的に必要な「位置」と「攻撃量」の変数 cout << "さあ、あなたの攻撃です。" << '\n'; cout << "攻撃の位置(1~5の数値)を入力してください。" << '\n'; cin >> iti; cout << "攻撃に使うパワー(100以下の数値)を入力してください。" << '\n'; cin >> kougeki; cout << '\n'; you.kougeki_suru(kougeki); if(buu_no_basyo == iti){ buu.kougeki_sareru(kougeki * 2); }else{ cout << "あなたの攻撃は外れたようです。" << '\n'; } cout << '\n'; cout << "大魔王の攻撃です。" << '\n'; cout << "(エンターキーを押してください)" << '\n'; cin.sync(); cin.get(); iti = rand() % 5 + 1; kougeki = rand() % 100 + 1; buu.kougeki_suru(kougeki); if(you_no_basyo == iti){ you.kougeki_sareru(kougeki * 2); }else{ cout << "大魔王ブウの攻撃は外れたようです。" << '\n'; } } int main() { Taiketu_basyo dokoka; //対決場所dokokaの生成 //ここでコンストラクタが働きヒーローと大魔王の位置が決められる dokoka.taiketu(); //dokokaの対決 このプログラムなんですが cin.sync(); cin.get(); の部分で「プログラムの進行を一時ストップし、エンターキー(リターンキー)で進行を再開する」としたんですがプログラムを動かしてみるとストップしません。 色々考えてみたんですが原因がわからないのでどなたか教えてもらえませんでしょうか? よろしくお願いします。 言語はC++でやってます。

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

  • ベストアンサー
回答No.1

よくわかりませんが やってみたら回避できたのでサンプルを。 #include <iostream> void main() { int num; std::cin >> num; std::cin.get(); //これがないと突き抜けますよ printf( "a" ); std::cin.sync(); std::cin.get(); printf( "b" ); } 要は、前に入力した内容が 文字列+改行 となっていて、 前回入力時の改行のみ次のget()で拾っている。 と、思います。 他にもっと方法があると思いますが これでとりあえずは回避できるかと。

sasuke2006
質問者

お礼

ありがとうございます! 教えてもらった通りにプログラムを直したらきちんと動きました♪ 本当にありがとうでした(^^)

関連するQ&A

  • 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; }

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

    二次方程式の解を求めるプログラムで虚数解の場合、a=0の場合、実数解の場合で求めるようにしているんですが、 #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 が来るのは分かってるんですが、数学でこういう書き方しなし、ここから先の書き方が分からないんですが、どうやって書けばいいですか? 多分return 0; } のぞいてあと2行か1行だと思うんですが

  • 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; }

  • プログラムが~~~!!

    こんにちは。今、プログラム書いてるんですけど目的としては、 1、テキストファイルから文字列を読み込む。(大体数万文字) 2、それを100個ずつに区切る。 3、その百個ずつを二文字ずつ読んでいって、それがgcという文字列ならばその 百個の中での割合を示す。 4、さらに次の百個を・・・・ みたいなプログラムを書いてるんですけど一応下のような形までこぎつけましたが もう、お手上げです。 どなたか、助けてください。 #include<iostream.h> #include<stdio.h> #include<string.h> int main() { char pch[3]; int count=0; FILE *fin; fin=fopen('C:\ahowaki.dat','r'); fscanf(fin,'%s',&pch); cout<<"入力\n"; while(pch){ cin.read(pch,2); if((strcmp(pch,"gc"))==0) count++; if(count>=0 && count<=25) cout<<"Under25%\n"; if(count>=26&& count<=50) cout<<"Under50\n"; if(count>=51&& count<=75) cout<<"Under75%\n"; if(count>=76&& count<=100) cout<<"Under99%\n"; else cout<<"Over100%\n"; } return 0; fclose(fin); }

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

    #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; } このプログラムってどんな計算をしてるんですか?誰か分かる人いますか 整数値を入れてくださいって出るだけなんですが

  • 質問です!とても基本的なことなので、少し詳しい方なら、解ると思います。

    最近、VC++の勉強を始めました。 とあるサイトで勉強させていただいていて、 その中のプログラムで http://www.asahi-net.or.jp/~yf8k-kbys/newcpp9.html この、簡単なゲームを作るのがありました。 ほぼ理解できるのですが、1箇所理解できないのが、 Daimao bu; //対決場所にいる大魔王bu! Hero you; //対決場所にいるヒーローyou! ここです。ここでは自分で好きな変数型を作ってるという意味で daimaoという型(intとかみたいな)の変数名 buという事だと思うのですが、 daimao形と言われても、中に数字とか文字とか何が入るのでしょうか? どう解釈すればよいのでしょうか? そして、ここで、 bu と you を作ってあるためだと思うのですが、 この行の少し下に、 you.kougeki_suru(kougeki); //ヒーローyouの攻撃 というのもあります。 いきなりyou.でヒーローのクラスと継承できてる形になってますが、 どうしてでしょうか? 多分上に書いた、Hero youのおかげで書けるようになってると思うのですが、 詳しく教えていただけないでしょうか? よろしくお願いします。

  • 以下のプログラムについて教えてください

    #include<iostream.h> int main() { int i; int ninzu=0; int tensu[6]; int rakudai[6]; cout<<"6人の点数を入力!\n"; for(i=0; i<6;i++) { cout<<i+1<<"番:"; cin>>tensu[i]; if(tensu[i]<60) { rakudai[ninzu]=i; ninzu++;} } cout<<"60点未満は"<<ninzu<<"人です。\n"; for(i=0; i<ninzu; i++) cout<<rakudai[i]+1<<"番:"<<tensu[rakudai[i]]<<"点\n"; return(0); } というテストの点数が60点未満の学生の一覧表を出力するというプログラムなんですが、12行目からの rakudai[ninzu]...以降が よくわかりません。配列の数を指定するところに数字以外のものが来るというのはいったいどういうことなのでしょう?どなたか教えてください。

  • C++で乱数を重複しないように発生させる

    C++で乱数を重複しないように発生させるようにプログラムを変更しろと言われたのですが、できません。 教えていただきたいです。 #include<iostream> #include<cstdlib> #include<cstring> #include<ctime> using namespace std; int main() { int i,n; int *p; cout<<"何個記憶しますか?"<<endl; cin>>n; p=new int[n]; if(p==NULL){ cout<<"記憶域の確保に失敗しました。"<<endl; return 1; } srand((unsigned)time(NULL)); rand(); i=0; while(i<n){ p[i]=1+(int)((double)rand()/(RAND_MAX+1.0)*75); if(p[i]==p[i]) cout<<"p["<<i<<"]の値"<<p[i]<<endl; i++; } delete[] p; return 0; }

  • C++の問題の問題なんですが

    a = 3+aを代入演算子を用いて表現せよ。ってどうすればいいんですか? a+=3;ですか? 以下のように出力されるプログラムを作成せよ 年齢を入力してください 16 生まれた年を入力してください 1986 好きな数字を入力してください 7 あなたは1986年生まれの16才で、7が好きですね #include <iostream> using namespace std; int main(){ cout << "年齢を入力してください\n" << 16 << endl; cout << "生まれた年を入力してください\n" << 1986 << endl; cout << "好きな数字を入力してください\n" << 7 << endl; cout << "あなたは1986年生まれの16才で、7が好きですね" << endl; return0; } 上の問題にcinを一度だけ使って表現せよ 1番最初のプログラムはこうでいいのかなと思うんですが、次のcinを一度だけ使って表現せよって言うのが分かりません。実行結果も含めて教えてもらえませんか?

  • 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文字という文字制限をなくしたい場合どういった工夫をすればいいのでしょうか?

専門家に質問してみよう