2017-02-03 12 views
1

Я пытаюсь создать программу, которая откроет файл на основе ввода пользователей. мой код Здесь `s:открытие файла на основе ввода пользователем C++

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

int main() { 

    string filename; 
    ifstream fileC; 

    cout<<"which file do you want to open?"; 
    cin>>filename; 

    fileC.open(filename); 
    fileC<<"lalala"; 
    fileC.close; 

    return 0; 
} 

Но когда я компилирую его, он дает мне эту ошибку:

[Error] no match for 'operator<<' (operand types are 'std::ifstream {aka std::basic_ifstream<char>}' and 'const char [7]') 

Кто-нибудь знает, как решить эту проблему? Спасибо ...

+0

Посмотрите на 'документации StD :: ifstream' в. –

+4

... и вместо этого используйте 'std :: ofstream'. –

ответ

5

У вашего кода есть несколько проблем. Прежде всего, если вы хотите записать в файл, используйте ofstream. ifstream предназначен только для чтения файлов.

Прежде всего, открытый метод принимает char[], а не string. Обычный способ хранения строк в C++ заключается в использовании string, но они также могут храниться в массивах char s. Чтобы преобразовать string в char[], используйте метод c_str():

fileC.open(filename.c_str()); 

close метод представляет собой метод, не является атрибутом, так что вам нужно круглые скобки: fileC.close().

Так правильный код выглядит следующим образом:

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

int main() { 
    string filename; 
    ofstream fileC; 

    cout << "which file do you want to open?"; 
    cin >> filename; 

    fileC.open(filename.c_str()); 
    fileC << "lalala"; 
    fileC.close(); 

    return 0; 
} 
2

Вы не можете писать на ifstream, так как это ввод. Вы хотите написать ofstream, который является выходным файлом.

cout << "which file do you want to open?"; 
cin >> filename; 

ofstream fileC(filename.c_str()); 
fileC << "lalala"; 
fileC.close(); 
+0

все еще дает мне эту ошибку [Error] Нет подходящей функции для вызова в std :: basic_ofstream :: basic_ofstream (std :: string &) ' – Hillman

+0

@Hillman Моя ошибка, конструктор для 'std :: ofstream' принимает' const char * 'вместо' std :: string', поэтому вызовите '.c_str()' вне вашего имени файла. – CoryKramer

+0

Хорошо его работает :-D спасибо – Hillman