Как на C++ преобразовать int в char?
Мне нужно создать несколько тысяч файлов.txt и потом прочитать данные из них. Каждый файл должен быть пронумерован. Ещё желательно поделить их на категории, например: A126.txt B1235.txt или C684.txt. Экспериментировал я с таким кодом и у меня почему-то съедаются буквы
#include<Windows.h>
#include<iostream>
#include <fstream>
#include <string>
#include <time.h>
using namespace std;
int j = 0;
int main()
{
for (int i = 1; i <= 5; i++)
{
char ch = char(i);
//char ch = (char)i;
//char ch = static_cast<char>(i);
setlocale(LC_ALL, "ru");
ofstream fout;
fout.open(ch + ".txt");
if (!fout.is_open())
{
cout << "Ошибка записи в файл конфигурации!" << endl;
}
else
{
fout << i << endl;
}
fout.close();
setlocale(LC_ALL, "ru");
ifstream fin;
fin.open(ch + ".txt");
if (!fin.is_open())
{
cout << "Ошибка чтения файла конфигурации!" << endl;
}
else
{
fin >> j;
}
fin.close();
cout << ch + ".txt" << j << endl;
cout << "j: " << j << endl;
}
return 0;
}
Оставил комментарии с некоторыми экспериментами.
Ответы (3 шт):
У вас получается какие-то непечатные символы с кодами 1, 2, 3 и так далее. А потомы складывать символ с указателем строки - совсем не то, что нужно.
Можно попробовать сделать так
string filename(1,'A');
filename[0] += i;
filename += ".txt";
ofstream fout;
fout.open(filename.c_str());
и вы получите файлы B.txt, C.txt и дальше.
Удобную работу для создания строки есть в классе stringstream. Вы можете писать/читать в этот поток что-нибудь и потом вывести результат строкой.
#include <sstream>
#include <iostream>
int main(int argc, char* argv[]){
char const* h[]={"ab","cd","ef","gh"};
for(int i=0;i<4;++i){
for(int j=10;j<14;++j){
std::stringstream ss;
ss<<h[i]<<j<<".txt";
std::cout << ss.str() << std::endl;
}
}
}
ab10.txt
ab11.txt
ab12.txt
ab13.txt
cd10.txt
cd11.txt
cd12.txt
cd13.txt
ef10.txt
ef11.txt
ef12.txt
ef13.txt
gh10.txt
gh11.txt
gh12.txt
gh13.txt
С кодом помогла нейросеть, делает именно то, что нужно:
#include<iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
for (int i = 1; i <= 20; i++)
{
string filename = "file" + to_string(i) + ".txt";
ofstream new_file;
ofstream fout;
fout.open(filename);
fout << i << endl;
fout.close();
}
return 0;
}
"file" меняется на нужную категорию.