我有一个功能:
void ReadInput(const char * name)
{
ifstream file(name);
cout << "read file " << name << endl;
size_t A0, A1, A2;
file >> A0 >> A1 >> A2;
}
现在我想在循环中读取两个文件:INPUT1.txt和INPUT2.txt,例如:
int main ()
{
for (int i = 1; i < 3; i++){
ReadInput(INPUT$i);
}
return 0;
}
问题是如何正确定义循环。
感谢您提前的时间。
以下是整个代码:
#include <iostream>
#include <string>
using namespace std;
void ReadInput(const string& _name){
ifstream file(_name);
size_t A0, A1, A2;
file >> A0 >> A1 >> A2;
}
int main ()
{
for (int i = 1; i < 3; ++i) {
string file_name = "INPUT" + to_string(i) + ".txt";
ReadInput(file_name);
}
return 0;
}
好的,一切都很好,现在我可以通过将字符串转换为const char和stringstream而不是to_string来在c ++ 98中编译。我的目标是运行一个自动程序,输入文件都在同一目录中。关于问题的可能重复的建议没有实现,因为我必须在我执行时传递输入文件号,据我所知,这对于3,000个文件是不切实际的。
答案 0 :(得分:1)
如果您有多个文件(最多n_max+1
),其名称为“INPUTn.txt”,其中将保证循环,那么以下将是一个潜在的解决方案:
for (int i = 1; i < n_max; ++i) {
std::string file_name = "INPUT" + std::to_string(i) + ".txt";
ReadInput(file_name);
}
这需要将ReadInput
更改为:
void ReadInput(const std::string& _name);
而不是使用const char*
。
如果您没有C++11
访问权限,请在std::to_string
处使用此代码:
#include <sstream>
//...
template<typename T> std::string to_string(const T& x) {
return static_cast<std::ostringstream&>((std::ostringstream() << std::dec << x)).str();
}
答案 1 :(得分:0)
更正了以下代码中的一些内容。请注意,要使std::to_string
工作,您至少需要使用标记-std=c++11
进行编译
#include <iostream>
#include <string>
#include <fstream> // you need this for std::ifstream
using namespace std;
void ReadInput(const string& _name){
// ifstream file(name); should be '_name'
ifstream file(_name);
// size_t A0, A1, A2 - what if your file contains characters?
string A0, A1, A2;
file >> A0 >> A1 >> A2;
// output
cout << "File: " << _name << '\n';
cout << A0 << " " << A1 << " " << A2 << '\n';
}
int main ()
{
for (int i = 1; i < 3; ++i) {
string file_name = "INPUT" + to_string(i) + ".txt";
ReadInput(file_name);
}
return 0;
}
或者如果文件较长,您可能希望使用std::getline
void ReadInput(const string& _name){
ifstream file(_name);
string line;
cout << "File: " << _name << '\n';
while (getline(file, line)) {
cout << line << '\n';
}
}
答案 2 :(得分:0)
我想你想要的是:
int main (int argc, char* argv[])
{
using namespace std;
for (int i = 1; i < argc; ++i) {
string file_name = string(argv[i]) + to_string(i) + ".txt";
ReadInput(file_name);
}
return 0;
}
有关详细信息,请参阅:https://stackoverflow.com/a/3024202/3537677