2014-09-08 6 views
-3

Хорошо, я пытаюсь создать выходной файл с настраиваемым именем, но по какой-то причине его не позволяет мне, и я искал везде, но я чувствую, что это легко исправить.Создание пользовательского выходного файла с использованием cin

Кстати, я знаю, вы можете изменить его на «строку», но, пожалуйста, не мне это нужно как полукокс

Пожалуйста, помогите! Благодаря

#include <iostream> 
#include <fstream> 

using namespace std; 



void PrepareOutputFile(char); 


const int MAX_LENGTH_FN = 30; 
int main() 
{ 


    char outputFilename[MAX_LENGTH_FN + 1]; 
    ofstream fout; 

    PrepareOutputFile(fout); 
    fout.open(outputFilename); 

    fout << "Hi" << endl; 
    fout.close(); 
    return 0; 

} 


void PrepareOutputFile(char outputFilename){ 

    cout << "Output filename (up to 30 characters): "; 
    cin >> outputFilename; 
} 
+0

Ваша функция 'PrepareOutputFile' ожидает' char' в качестве входных данных, но вы передаёте массив 'char's вместо этого. Вы также не предоставляете никаких средств для возврата значения 'outputFilename' из вашей функции в' main'. – wolfPack88

+2

Вы определяете 'PrepareOutputFile' как взятие символа' char' (который является единственным символом), но затем передавайте его и 'outstream'. Я удивлен, что это даже компилируется. – crashmstr

+0

Вы пытаетесь сделать сразу две вещи: прочитать в имени файла и записать в файл. Снасти их по одному. – Beta

ответ

0

Вы, вероятно, хотите что-то вроде

void PrepareOutputFile(std::string& outputFilename) { 
    cout << "Output filename (up to 30 characters): "; 
    cin >> outputFilename; 
} 

и в main()

std::string outputFilename; 
ofstream fout; 

PrepareOutputFile(outputFilename); 
fout.open(outputFilename.c_str()); 

// ... 

Примечание:
Старые определения стандартов требуют, чтобы пропускать const char* к std::ofstream::open(), но вы всегда можете легко сделать это usi ng std::string::c_str() функционирует как параметр.

Если это не соответствует вашим требованиям (вообще-то), вам серьезно нужно будет объяснить в своем вопросе, почему вам действительно нужна простая подпись char. Это не имеет смысла и никогда не будет работать для получения правильного имени файла для функции std::ofstream::open()!

+0

Мне нужно сохранить его как char –

+1

@MattRay Почему на самом деле? Если вам нужно передать 'outputFilename' вокруг как' const char * '(простой' char' в любом случае ошибочен !!), просто используйте 'outputFilename.c_str()', как уже упоминалось. –

+1

@drescherjm Пожалуйста, обращайтесь к OP, который будет иметь больший эффект, чтобы ваш комментарий был замечен ими. (Я бы предположил, что я не был основной целью вашего комментария) –

0
  1. Составы ли они? Если нет, подумайте о ошибках компиляции и попытайтесь исправить свои проблемы с кодировкой. Если да, дайте мне знать, где (компилятор и платформа).

    Почему вы хвалите ofstream fout как параметр char outputFilename? На G 4.9.0 ++ это дает следующее сообщение об ошибке:

    error: invalid user-defined conversion from ‘std::ofstream {aka std::basic_ofstream<char>}’ to ‘char’ [-fpermissive]

  2. Я вижу вы инициализацию charмассиваoutputFilename в main. Вам необходимо передать его при вызове PrepareOutputFile. И посмотрите на объявление PrepareOutputFile - помните, что есть разница между передачей char и char * в качестве параметра!

    Совет: char указатель может быть также указатель на массив charchar массив сам в некотором роде).

Смежные вопросы