2015-03-25 2 views
0

Скажем, у меня есть программа, которая делает последующие:Создать цикл для записи нескольких файлов на C++?

for (i=1; i<10; i++) 
{ 
    computeB(i); 
} 

где computeB просто выводит список значений

computeB(int i) 
{ 
    char[6] out_fname="output"; 
    //lines that compute `var` using say, Monte Carlo 
    string fname = out_fname + (string)".values"; 
    ofstream fout(fname.c_str()); 
    PrintValue(fout,"Total Values", var); 

} 

из другого файла:

template <class T> 
void PrintValue(ofstream & fout, string s, T v) { 
    fout << s; 
    for(int i=0; i<48-s.size(); i++) { 
    fout << '.'; 
    } 
    fout << " " << v << endl; 
} 

Перед реализацией, что loop, computeB только что выдает один файл значений. Теперь я хочу, чтобы он создал несколько значений. Итак, если он изначально создал файл с именем «output.values», как я могу написать цикл, чтобы он создавал «output1.values», «output2.values», ..., «output9.values»?

EDIT: Я забыл упомянуть, что исходный код использовал функцию PrintValue для вывода значений. Первоначально я пытался сэкономить пространство и исключить это, но я просто вызвал замешательство

ответ

0

Игнорируя все синтаксические ошибки в коде ...

  1. Используйте значение входного i вычислить имя выходного файла.
  2. Используйте имя файла для построения ofstream.
  3. Используйте ofstream, чтобы написать var.

Вот что функция будет выглядеть следующим образом:

void combuteB(int i) 
{ 
    char filename[100]; 
    sprintf(filename, "output%d.values", i); 
    ofstream fout(filename); 
    fout << "total values"; 
    fout << " " << var << endl; // Not sure where you get 
           // var from. But then, your 
           // posted code is not 
           // exactly clean. 
} 
+0

@ user4352158, это трудно сказать, где вещи могли поступили неправильно, не увидев фактический код, который вы используете для компиляции. Попробуйте опубликовать [MCVE] (http://stackoverflow.com/help/mcve). –

0

Вы можете использовать std::to_string() для преобразования из int к string:

void computeB(int i) 
{ 
    if (std::ofstream fout("output" + std::to_string(i) + ".values")) 
     fout << "total values" << " " << var << '\n'; 
    else 
     throw std::runtime_error("unable to create output file"); 
} 
+0

Когда я пытаюсь это сделать, я получаю ошибку 'to_string 'не является членом' std''. Я компилирую с gcc/4.6, и я использую make-файл ' – user4352158

+0

@ user4352158: следуйте по ссылке, которую я предоставил, чтобы посмотреть, какой заголовок вам нужно включить. Совет: google "std :: XYZ site: cppreference.com" для таких ошибок .... –

+0

Я должен использовать '#include ', правильно? Даже если я включаю, что я получаю ту же ошибку – user4352158

Смежные вопросы