Как на C++ преобразовать int в char?

Рейтинг: -2Ответов: 3Опубликовано: 25.02.2023

Мне нужно создать несколько тысяч файлов.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;
}

Оставил комментарии с некоторыми экспериментами.

Ответы

▲ 2

Удобную работу для создания строки есть в классе 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
▲ 1

У вас получается какие-то непечатные символы с кодами 1, 2, 3 и так далее. А потомы складывать символ с указателем строки - совсем не то, что нужно.

Можно попробовать сделать так

    string filename(1,'A');
    filename[0] += i;
    filename += ".txt";
    ofstream fout;
    fout.open(filename.c_str());

и вы получите файлы B.txt, C.txt и дальше.

▲ 0

С кодом помогла нейросеть, делает именно то, что нужно:

#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" меняется на нужную категорию.