• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Помогите Найти Ошибку

  • Автор темы AnnaSemenova
  • Дата начала
A

AnnaSemenova

C++:
Помогите пожалуйста исправить ошибку! Практиковалась с записью в файл и решила создать программу, позвляющую записать в файл с переменным именем.
Проверяю на простейшем коде, для чего создаю целочисленную переменную и символьный массив - имя файла, в который надо ввести ту или иную строку. Имя файла должна выглядеть в итоге так:
C:/Astr/hello(символ, равный значению i).txt
Для этого определенным элементом массива пытаюсь сделать переменную i, приведенную к символьному типу при помощи преобразования типов. Компилятор проглатывает это без возражений. компилирует, линкует.
Но при запуске программы файл не создается и ничего туда не записывается
вот код:

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
//char file_name [32]="C:/Astr/hello1234567890abcd.txt";
char file_name1[64];
int i=1;
C++:
file_name1[0]='C';
file_name1[1]=':';
file_name1[2]='/';
file_name1[3]='A';
file_name1[4]='s';
file_name1[5]='t';
file_name1[6]='r';
file_name1[7]='/';
file_name1[8]='h';
file_name1[9]='e';
file_name1[10]='l';
file_name1[11]='l';
file_name1[12]='0';
//cout<<"input number"<<'\n';
//cout<<1<<'\n';
//cin>>file_name1[13];
file_name1[13]=char(i);
file_name1[14]='.';
file_name1[15]='t';
file_name1[16]='x';
file_name1[17]='t';
file_name1[18]='\0';
ofstream fout;
fout.open(file_name1);
fout << "Hello world!" << '\n';
fout.close();
return 0;
}
компилятор для С++ из code::blocks<pre><code class="cpp"></code></pre>
 
R

rrrFer

Код:
#include <sstream>
#include <fstream>
#include <iostream>
int main() {
std ::stringstream sstr;
std ::ofstream ofst;
char fname[255];

std ::cin >> fname;
sstr << "C:\\TP\\hello" << fname << ".txt"; 
sstr .getline(fname, 255);

ofst .open(fname);
ofst << "1";
ofst .close();

return 0;
}
Для создания файла нужно чтобы каталог существовал. (в моем коде это C:\TP)
 
A

AnnaSemenova

А что означает sstr?
Кроме того, хотелось бы не просто бездумно копировать код, но и понять, что же все-таки у меня неправильно было.
И еще одна проблема. Знай я заранее, как назвать файл, вопроса бы не возникло. Но возникает новая задача:
В ходе очередной программы мне надо записывать однотипные данные в последовательность файлов, отличающихся именем, вроде "C:/Astr/hello1", "C:Astr/hello2" и так далее. Можно ли это организовать в цикле, или же каждый ввод в каждый файл придется прописывать вручную?
 
R

rrrFer

А что означает sstr?
так в коде все написано:
Код:
	std ::stringstream sstr;
т.е. sstr - экземпляр класса stringstream


Знай я заранее, как назвать файл, вопроса бы не возникло.
у меня там имя файла формируется из "C:\\TP\\hello" потом идет строка, введенная пользователем, потом ".txt";
Вместо строки, введенной пользователем можно впихнуть что угодно.

Можно ли это организовать в цикле, или же каждый ввод в каждый файл придется прописывать вручную?
все возможно: :)
Код:
#include <sstream>
#include <fstream>
int main() {
std ::stringstream sstr;
std ::ofstream ofst;
char fname[255];

for (int i = 0; 5 > i; ++i) {
sstr .clear();
sstr << "C:\\TP\\hello" << i << ".txt"; 
sstr .getline(fname, 255);

ofst .open(fname);
ofst << i;
ofst .close();
}

return 0;
}

но и понять, что же все-таки у меня неправильно было.

Код:
file_name1[13]=char(i);
если I будет равно нулю - строка "обрежется", Если 0<=i<=9, то можно писать file_name1[13] = char(i+'0'); но не хорошо каждый символ строки задавать руками как элемент массива, ведь есть строки )

Код:
 file_name1[2]='/';
может быть я не прав, но я опасаюсь использования таких слешей, пишу вместо них 2 прямых, я не уверен что win всегда это верно воспринимает.

Для создания файла нужно чтобы каталог существовал. (в моем коде это C:\TP)
а у Вас существовал целевой каталог? - может быть поэтому и не работало? А если каталог есть - то мне кажется ваша программа должна работать если вводить адекватные значения i (посмотреть в таблице кодов), попробуйте, например, int i=49;
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!