• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:getlineについて)

getlineについて

このQ&Aのポイント
  • C++のgetlineを使用したプログラムで、80文字の制限をなくす方法を教えてください。
  • プログラム中で標準入力から各行を80文字だけ読み込み出力する際に、80文字制限をなくす方法について教えてください。
  • getlineを使用するプログラム中の80文字制限をなくす方法についてご教示ください。

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

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.2

まず、どんな感じの工夫をしてみましたか?修正されたソースを提示してください。 基本はほとんど書いたままなのですが、もう少しだけ説明を追記しておきます。 # 工夫の仕方を質問されてるのに、ソースをそのまま載せるのは好ましくないと考えますのであえて載せません。ご了承ください。 # FAQに近いので、どうしてもということであればGoogleで"getline(cin, buffer)"と検索するだけでも色々説明が出てきますし。 > char buffer[81]; こうかいてしまうと、当然一度に読み込めるのはこの80文字以下になる。 80文字ずつの分割読み出しは面倒。 std::stringは文字列長が可変なので、まずbufferをcharにするのはやめて、std::stringにする。 > std::string buffer; > cin.getline(buffer,sizeof(buffer)); ここでsizeof(buffer)とやっているが、これはcharの場合には81になり、制限になっている。 また、cin.getlineはstd::stringを取るようになってないので、これを使うと文字数制限が消えない。 で、getlineには、cin(が所属するstd::istream)のメンバとしてのstd::istream::getlineと、そうでないstd::getlineというものが用意されている。 今回、読み出し数制限を緩和するためにはstd::getlineを使うので、呼び出し方を変えなければならない。 > getline(cin, buffer); ってことです。 ちなみに、この場合でもstd::string::max_size()以上の入力とかしようとすると標準例外が発生する可能性はありますが、 通常は数万とか数十万文字とか(コンパイラ次第)入りますので、 入門レベルではまだ気にする必要がないかもしれません。 # 実務なら例外対策は重要ですけれど。興味があればtryやcatchの仕方等を調べてみてください。

enigma2005
質問者

お礼

詳しい回答ありがとうございます。 工夫した点に関しては、初めNULLを使って何とかならないものかと色々やってみましたが、この説明を見て自分のやってる行為が恥ずかしくなってきました。 tryやcatchに関してもちょっと勉強して見たいと思います。 どうもありがとうございました。

その他の回答 (1)

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.1

bufferをstd::stringに変えて、 getlineをメンバでないstd::getlineに変える。 std::string buffer; getline(cin, buffer);

enigma2005
質問者

補足

回答ありがとうございます。 すみませんがもう少し詳しく書いてくれるとありがたいです。 上のプログラムも参考書片手に、見よう見まねで書いたものなので。 申し訳ないです。

関連するQ&A