今文字列を入力して、それをclassに送るプログラムを作成してるんですが、
どうもうまい事いきません。
エラー内容
入力が不可能。
入力画面を飛ばして、次の場面に切りかわる。
プログラムの一部です。
エラーはありません。
ITEM temp[1];
cout << "\t\tPlease enter movie title name.\n\t\t";
cin.getline(temp[0].title,sizeof(temp[0].title));
system("cls");
found = List.searchOne(temp);
上のコードの呼び出しはswitch and caseを使用して、呼び出してます。
WinXP
Visual studio
> 入力画面を飛ばして、次の場面に切りかわる。
入力画面="Please enter movie title name."が飛ばされる、ということは、
提示されたコード以外の場所に問題のある可能性が高いですね。
よくあるのが、入力ストリームに、前回入力時の改行文字が残っていて、
それが、cin.getline() 時に導出されて、そのまま次に進むと言う
パターンですね。
大変返事が送れてすいません。
cout << "\t\tPlease enter movie title name.\n\t\t";
上のstringを表示した後、入力せずに処理が勝手に進みます。
この入力する前に、オプションを入力しています。
そこの改行が導出してるんでしょうか?
この問題を解決する方法があれば、是非おしえてください。
もう解決してるのかも知れませんが:やってみたので
守護
> cout << "\t\tPlease enter movie title name.\n\t\t";
> 上のstringを表示した後、入力せずに処理が勝手に進みます
しかし、上の守護さんの書いたコードだけでは再現しない。
RAPTさんはそれを踏まえて、その前の処理に要因ありと指摘してくれてます。
守護さん
>このgetlineの前にオプションを入力している。
ここを書いてもらえれば、多分速攻で説明が出て終わってたんでしょうがそうならなかった。
cin,coutは普段使わないので興味が出たのでやってみました。
対策は cin.ignore() で行けるんではないかなと思います。
#include <iostream>
using namespace std ;
struct ITEM {
static unsigned itemcount;
char title[512];
unsigned id;
ITEM(){ id = itemcount++ ; }
};
unsigned ITEM::itemcount = 0;
ITEM temp[8];
void main(){
cout << "Number of Items = " << ITEM::itemcount << endl;
cin.get(); // オプション選択の部分の代わり
cin.ignore(100,'\n'); // これが対策部分
cout << "\t\tPlease enter movie title name.\n\t\t";
cin.getline(temp[0].title,sizeof(temp[0].title));
system("cls");
cout << "found = List.searchOne(temp);" <<endl ;
}
いじょ
ツイート | ![]() |