Простой пользовательский запрос имени файла для вывода и ввода - PullRequest
0 голосов
/ 12 сентября 2010

Как я могу попросить пользователя ввести имя файла, из которого должна считываться моя программа, и получить вместо него имя с расширением .out?

Пример:

char fileName[256];
cout << "What is the file name that should be processed?";
cin >> fileName;

inFile.open(fileName);
outFile.open(fileName);

Но мне нужно, чтобы сохранить файл как filename.out вместо исходного типа документа (IE: .txt)

Я пробовал это:

char fileName[256];
cout << "What is the file name that should be processed?";
cin >> fileName;

inFile.open(fileName.txt);
outFile.open(fileName.out);

Но я получаю этиошибки:

c: \ users \ matt \ documents \ visual studio 2008 \ projects \ dspi \ dspi \ dspi.cpp (41): ошибка C2228: слева от '.txt' должен быть класс /Тип struct / union 1>: 'char [256]'

c: \ users \ matt \ documents \ visual studio 2008 \ projects \ dspi \ dspi \ dspi.cpp (42): ошибка C2228: слева от'.out' должен иметь класс / struct / union 1> тип is 'char [256]'

Ответы [ 3 ]

1 голос
/ 12 сентября 2010

Чтобы изменить расширение имени файла:

string fileName;
cin >> fileName;
string newFileName = fileName.substr(0, fileName.find_last_of('.')) + ".out";
1 голос
/ 12 сентября 2010

Вы используете iostreams, подразумевая использование C ++. Это, в свою очередь, означает, что вы, вероятно, должны использовать std :: string, в которой перегружены операторы для конкатенации строк, - и приятный побочный эффект автоматического управления памятью и дополнительной безопасности.

#include <string>
// ...
// ...
std::string input_filename;
std::cout << "What is the file name that should be processed?\n";
std::cin >> input_filename;
// ...
infile.open(input_filename + ".txt");
0 голосов
/ 12 сентября 2010

Запись filename.txt подразумевает, что fileName является объектом, и вы хотите получить доступ к его элементу данных .txt.(Аналогичный аргумент применим к fileName.out).Вместо этого используйте

inFile.open(fileName + ".txt");
outFile.open(fileName + ".out");
...