
c++ 初心者 です。fortran 77fortran 90でしたら幾分わかります。
c++ のプログラムで、for 文やwhile文の中に出力させる文章を置いて、出力されるファイル名をforやwhileの変数に関連ずけるには、どういったものを書けばよいでしょうか?
たとえば、以下のようなプログラムを書いて実行すると、"test"という文が書かれた"1"というファイル名のファイルが出力されます。
/ / / / / / / / / / / / / / / / / / /
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ofstream of;
of.open("1", ios::app);
of << "test" << endl;
of.close();
return 0;
}
/ / / / / / / / / / / / / / / / / / /
上のプログラムの中の出力ファイル名は"1"ですが、これをfor文等のループの中で"1"~"10"として10個のファイルを出力したいです。
以下のように書くと、"i"というファイルに"test"という文字が10個書き込まれます。
/ / / / / / / / / / / / / / / / / / /
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int i;
ofstream of;
for(i=0; i<=10; i++) {
of.open("i", ios::app);
of << "test" << endl;
of.close();
}
return 0;
}
/ / / / / / / / / / / / / / / / / / /
上のプログラムの中の"i"のクオーテーションマーク""をとって
of.open(i, ios::app);
のように書いたらエラーでコンパイルできません。また、
of.open((char*) i, ios::app);
のように書くとコンパイルはできますが、ファイルができません。
ファイル名"1"に"test"
ファイル名"2"に"test"
ファイル名"3"に"test"
・
・
・
ファイル名"10に"test"
という風に出力できればいいのですが...
わかる方すみませんが、ご指導願います
No.4ベストアンサー
- 回答日時:
>> ご回答頂いたものを"test9.cpp"ファイルに入れて、コンパイル(cyglaunch.exe上でg++ (ファイル名))してみますと、以下のようなエラーメッセージがでてきました。
環境が違うようなので、以下を試してみてください。
g++は触ったことがありませんが、恐らく宣言されている引数の型が違うのでしょう。
of.open(oss.str().c_str(), ios::app);
No.3
- 回答日時:
FORTRAN77 がそれでいいなら
ofstream of[10];
of[0].open(....);
of[1].open(....);
// 以下略
for (int i = 0; i < 10; ++i)
of[i] << "test" << endl;
とでもする.
No.2
- 回答日時:
C++ ではなく Fortran だったらどう書きますか?
まさか,
integer i
open(10, file=i)
などとは書きませんよね.
すみません、返事遅れました。
ご回答、ありがとうございます。
そうですね、fortran 77 だと、
-------------------------
open(1,file="1")
open(2,file="2")
open(3,file="3")
・
・
open(10,file="10")
do 20 i= 1,10
write(i,*) test
20 continue
end
-------------------------
でできるのですが、C++だと、まだまだ勉強不足でどのようにすればいいのか見当がつきません..
もう少し、自分なりに考えてみますね。
No.1
- 回答日時:
C/C++言語では基本的に文字列と整数が区別されます。
"1"、"i" →文字列
i →整数
(char*)i →整数をむりやり文字列にキャストした物
ですので、整数を文字列に変換する必要があります。
やり方は色々ありますが一例として。
-----------------------------------------------
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
int main()
{
int i;
ofstream of;
for(i=0; i<=10; i++)
{
ostringstream oss;
oss << i;
of.open(oss.str(), ios::app);
of << "test" << endl;
of.close();
}
return 0;
}
-----------------------------------------------
この回答への補足
ご説明、ありがとうございます。返事が遅れてしまい、申し訳ございません。「教えてGoo!」の操作に少々手間取っていました。。
ご回答頂いたものを"test9.cpp"ファイルに入れて、コンパイル(cyglaunch.exe上でg++ (ファイル名))してみますと、以下のようなエラーメッセージがでてきました。
- - - - - - - - - - - - - - - - - - - - - - - - - -
$ g++ test9.cpp
test9.cpp: In function `int main()':
test9.cpp:17: error: no matching function for call to `std::basic_ofstream<char, std::char_traits<char> >::open(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, const std::_Ios_Openmode&)'
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/fstream:695: note: candidates are: void std::basic_ofstream<_CharT, _Traits>::open(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]
- - - - - - - - - - - - - - - - - - - - - - - - - -
これからこのエラーメッセージを自分なりに検証していきたいと思います。
やり方は色々あるとのことですが、上記に示して頂いた方法を是非使えるようになりたいと思いますので、もし何か訂正箇所がありましたら、度々すみませんが、宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C++/STLの動作
-
wrl.hはどこで手に入れますか
-
STLのwstring型から BSTR型 へ...
-
c++ ファイルからの複素数の読...
-
switch文のエラーについて
-
snprintfが使用できない。
-
wstringの内容を表示させたい
-
C言語
-
VC++で文字列から任意の文字を...
-
指定した文字を削除したい
-
_tcscat がうまくいきません(V...
-
std::wstringのメモリリークに...
-
Pythonでのmmapの使い方
-
標準C++ iostream での printf ...
-
boost::lexical_castで16進数文...
-
JPEGやPNGが読めるLoadImage関数
-
C++で2次元配列charをループしたい
-
#include "fstream.h"
-
#defineの使い方について
-
平均値を関数を用いて出力した...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
なぜ、C++の標準ヘッダをインク...
-
switch文のエラーについて
-
VC++で文字列から任意の文字を...
-
構文エラーが出ているのですが...
-
gccでコンパイル時のエラー
-
空ENTERの判別
-
vectorのイテレータを大小比較...
-
JPEGやPNGが読めるLoadImage関数
-
C++で、テキストファイルを一行...
-
std::wstringのメモリリークに...
-
enumの値から定義名を文字列化...
-
CStringとString
-
std::map の const 修飾について
-
#define中の#のエスケープ
-
#include "fstream.h"
-
_tcscat がうまくいきません(V...
-
C言語のポインターで詰まっている
-
ヘッダーファイルがインクルー...
-
構造体配列のvectorへの変換と...
-
C++での <iostream.h>と<iostre...
おすすめ情報