char — C ++ аргументы в целое число

Я пытаюсь создать текстовый файл с аргументами [1], которые должны быть целыми числами. Имя файла должно быть ex «3.txt», но файл, который я получаю, называется просто «t». Аргумент числа правильный, но имя файла почему-то становится неправильным. Какие предложения у вас есть, чтобы улучшить этот код и удобочитаемость и удобство использования?

int main(int argc,char *args[])
{
ofstream myFile;
int num = atoi(args[1]);

myFile.open(num + ".txt");

if (myFile.is_open())
{
myFile << "num\n" ;

for(int i=num; i > 0; i--)
myFile << i + ",";

myFile.close();
}
}

-1

Решение

Ваши проблемы возникают из-за использования неправильных типов. Прежде всего int() + "text" определены, но не делает то, что вы ожидаете. Это не операция со строками, но на указатели. Тебе лучше использовать язык. содержит станд :: строка и это будет легко с ним. Первоначально вы должны сделать строку из args[1]:

string num(args[1]);

Конечно, это должно быть выдано и вам нужно проверить это самое подходящее!

if(argc < 2)
//some throw

После этого оператор plus будет работать в соответствии с вашими пожеланиями. Итак, вы просто добавляете «.txt» к num,

num += ".txt"

Теперь вы должны открыть файл с ofstrem. Это ожидать const char*и строка по указанному адресу должна заканчиваться '\0' так что вы можете использовать станд :: basic_string :: c_str.

ofstream my_file(num.c_str());

Хорошо знать, так как вы можете дать просто std :: string:

ofstream my_file(num);

Давайте перейдем к основной теме («C ++ arguments to integer»). Вы можете просто использовать СТД :: стои. Как видите, вам не нужно беспокоиться о символах после числа.

 for(int i=stoi(num); i > 0; i--)
myFile << i << ","; //it can't be i + "," - as above

Или, если вы хотите преобразовать непосредственно аргумент в целое число, у вас есть возможность использовать станд :: atoi.

 int i = atoi(args[1]);

Наконец начало вашего кода должно выглядеть так:

 if(argc < 2)
{//some throw}
ofstream myFile;
string num =string(args[1])+".txt";
myFile.open(num.c_str());
0

Другие решения

Хитрый Когда вы делаете:

myFile.open(num + ".txt");

…вы на самом деле не переводите int как строку. Вместо этого вы принимаете char const* то есть ".txt" и сдвинуть его num (3 в вашем случае) символы перед тем, как передать его на открытие, отсюда ваш файл «t».

Я вижу, что вы используете C ++. Избавьте себя от головной боли, используя std::stringи C ++ 11 std::to_string функции, если вы можете.

4

Я не вижу причины, по которой вы конвертируете аргумент командной строки в число на 1-м месте здесь.

Измени свой код как

 myFile.open((std::string(argv[1]) + ".txt").c_str());

или для более поздних версий компилятора (способных стандарты)

 myFile.open(std::string(argv[1]) + ".txt");

Вам не нужно иметь argv[1] преобразуется в числовое значение.

1