Функция, которая принимает строку и число в качестве параметра для создания имени файла

#php #c

#php #c

Вопрос:

Я должен создавать разные файлы данных в цикле. Есть три типа файлов, которые я хочу сгенерировать следующим образом:

typeAd.txt,

typeBd.txt и

typeCd.txt

Для этого я хочу реализовать функцию, которая принимает порядковый номер и строку в качестве параметров.

Что-то похожее на это:

 void make_file(paarvec data, int count){ 

 int size = data.size();
 char filename[160];
 sprintf(filename, "named.txt", count);

 ofstream out_data(filename);
 for(int n=0; n<size;   n){
    out_data << data[n].first << "t" << data[n].second << endl;
    }
 out_data.close();
}
 

Но есть ли способ, которым я также могу изменить «имя» файла с помощью аргумента. Чтобы я мог писать:

 std::string timestring = "timedata";
std::string timestring = "pathdata";
...

for(int i=0; i<N;   i){
  ...
  make_file(time_data, timestring ,count);
  make_file(frac_data, fracstring ,count);
  make_file(path_data, pathstring ,count);
}  
 

Комментарии:

1. Какой закон запрещает вам просто добавлять другой параметр в make_file() ?

2. возможно, я сделал что-то не так, но это не сработало 🙁

3. «Привет, автоматический ремонт Чака? Моя машина не работает, вы можете это исправить? » — вы ожидаете получить осмысленный ответ на это?

4. На самом деле я получаю содержательный ответ умного и дружелюбного Славы ниже… Большое спасибо Славе.

Ответ №1:

Просто измените свою функцию на:

 void make_file(paarvec data, const std::string amp;name, int count){ 

  int size = data.size();
  char filename[160];
  snprintf(filename, sizeof(filename), "%sd.txt", name.c_str(), count);
  ...
 

Примечание, которое я изменил sprintf на snprintf — это хорошая привычка предотвращать неприятные сюрпризы в вашем коде, такие как переполнение буфера.