文字列操作


守護  2005-09-24 22:11:25  No: 59118

今文字列を入力して、それを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


iijima  2005-09-25 02:19:15  No: 59119

> 入力画面を飛ばして、次の場面に切りかわる。

入力画面="Please enter movie title name."が飛ばされる、ということは、
提示されたコード以外の場所に問題のある可能性が高いですね。


RAPT  2005-09-25 03:12:23  No: 59120

よくあるのが、入力ストリームに、前回入力時の改行文字が残っていて、
それが、cin.getline() 時に導出されて、そのまま次に進むと言う
パターンですね。


守護  2005-09-26 03:04:43  No: 59121

大変返事が送れてすいません。

cout << "\t\tPlease enter movie title name.\n\t\t";
上のstringを表示した後、入力せずに処理が勝手に進みます。

この入力する前に、オプションを入力しています。
そこの改行が導出してるんでしょうか?

この問題を解決する方法があれば、是非おしえてください。


しまねこ  2005-10-07 22:34:46  No: 59122

もう解決してるのかも知れませんが:やってみたので
守護
> 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  ;
}

いじょ


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加