• 締切済み

[C++]ファイル出力について

教えてください。 コマンドプロンプトから何行か書いた文章をファイルにしたいのですが、 うまくいきません。 作ったものの結果は1行1文字で出力されて、eofでうまく 終わってくれません。 コマンドプロンプトで入力(改行)された通りにファイルに出力 できるようにしたいので、どこがおかしいのか指摘お願いします。 #include <iostream> #include <fstream> #include <stdlib.h> #include <string.h> #include <string> using namespace std; int main(int argc, char *argv[]) { char str[100]; int i; i = 0; if (argc <= 1) { cerr << "Need filename" << endl; exit (1); } ifstream ifs(argv[1], ios::in); if (ifs) { cerr << "Caution" << argv[1] << " already exists " << endl; cerr << " Specify a different filename " << endl; exit (2); } ofstream ofs(argv[1], ios::out); if (!ofs) { cerr << " Unable to write to " << argv[1] << endl; exit (3); } while(str[i] !=EOF) { cin >> str[i]; ofs << str[i] << endl; i++; } return 0; }

みんなの回答

  • Werner
  • ベストアンサー率53% (395/735)
回答No.2

> while(str[i] !=EOF) > { >   cin >> str[i]; >   ofs << str[i] << endl; >   i++; > } str[i]はchar型なので、 cinからchar型に入力している事になり1文字ずつ入力されています。 (当然出力も1文字ずつ。) また、char型とEOFという値をもてないので、 EOFと比較してもいつ終わるかは運次第です。 他に、iが100以上になったときの対策が全くありません。 1行ずつ処理するなら例えば以下のような感じ。  string str;  while(!cin.eof())  {    getline(cin, str);    fs << str;  }

star323
質問者

お礼

回答ありがとうございます。 char型は符号なし数として扱われる0~255の値をとるので EOFの値である-1を判別できないということですか? char型ではなくて、文字列型を使えばよかったんですね。 明日実行してみます。

star323
質問者

補足

やってみたのですが、エラーはでずファイルも作られるのですが コマンドプロンプトのほうで入力したものが出力されませんでした。 もうちょっと考えてみます。 ありがとうございました。

回答No.1

cin >> str[i]; これだと空白文字を区切りとします。 getline に取り替えてみてください。

star323
質問者

お礼

回答ありがとうございます。 getlineで1行読み込みするということですね。 わかりました。 こんな簡単なことにありがとうございました。

関連するQ&A

専門家に質問してみよう