在循环C ++中读取文件

时间:2016-05-15 21:40:17

标签: c++ loops

我有一个功能:

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个文件是不切实际的。

3 个答案:

答案 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