![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
現在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文字という文字制限をなくしたい場合どういった工夫をすればいいのでしょうか?
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の仕方等を調べてみてください。
詳しい回答ありがとうございます。
工夫した点に関しては、初めNULLを使って何とかならないものかと色々やってみましたが、この説明を見て自分のやってる行為が恥ずかしくなってきました。
tryやcatchに関してもちょっと勉強して見たいと思います。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- がん・心臓病・脳卒中 子宮頸がん検診をうけました。軽度異形成、CIN+HPVハイリスク(16+他+)と書いた紙を渡されまし 4 2023/07/21 09:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
std::wstringのメモリリークに...
-
C++でのmath.hやstdio.hの使用...
-
空ENTERの判別
-
VC++で文字列から任意の文字を...
-
C++でShowCursorを使いたい。
-
enumの値から定義名を文字列化...
-
switch文のエラーについて
-
指定した文字を削除したい
-
VxWorks 6.4ソケット接続につい...
-
ヘッダーファイルがインクルー...
-
DLLでダイアログ
-
atlbase.h と afxwin.hの同時定義
-
ハミング符号の解読について
-
JPEGやPNGが読めるLoadImage関数
-
C++で2次元配列charをループしたい
-
なぜ、C++の標準ヘッダをインク...
-
mapの初期化
-
構文エラーが出ているのですが...
-
C++で、環境変数の読み込み方を...
-
セグメンテーションフォルトが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VC++で文字列から任意の文字を...
-
enumの値から定義名を文字列化...
-
switch文のエラーについて
-
std::wstringのメモリリークに...
-
空ENTERの判別
-
指定した文字を削除したい
-
構文エラーが出ているのですが...
-
#include "fstream.h"
-
なぜ、C++の標準ヘッダをインク...
-
C言語のポインターで詰まっている
-
C++での <iostream.h>と<iostre...
-
VHDLのsignedとunsignedの違いは?
-
snprintfが使用できない。
-
【C++】ヘッダ内でstringを格納...
-
C++で、テキストファイルを一行...
-
gccでコンパイル時のエラー
-
CStringとString
-
_CRT_SECURE_NO_DEPRECATE が効...
-
string型のフォーマット書式指...
-
JPEGやPNGが読めるLoadImage関数
おすすめ情報