2017-02-09 93 views
-3

我想製作一個簡單的程序,允許用戶創建/打開文件並向它們添加文本。這是代碼我目前:如何根據用戶輸入指定的文件名打開文件?

#include <iostream> 
#include <string> 
#include <fstream> 

using namespace std; 

int main() 
{ 
    cout << "Enter file name:" << endl; 
    char fileName; 
    cin >> fileName; 
    ofstream myFile; 
    myFile.open(fileName, ios::out); 
    myFile << "This is the file text.\n"; 
    myFile.close(); 
    return 0; 
} 

我收到的myFile.open(fileName, ios::out)以下錯誤:

error: no matching function for call to 'std::basic_ofstream<char>::open(std::__cxx11::string&, const openmode&)'

+1

文件名應爲字符串 –

+1

它不會是有趣的,只允許1個字符的文件名.. – drescherjm

+0

@ Raindrop7咩! –

回答

1

如果你看看錯誤信息,什麼是開放的括號上半年告訴你答案。用戶正在鍵入一個字符,文件名稱應該是一個字符串。相反的:

char fileName; 

用途:

string fileName; 
2

您在這裏簡單的問題是,存儲文件名可變filenamechar類型。將其更改爲string,以便它能正常工作。

在另一方面,試圖打破你得到了錯誤信息:

no matching function for call to 'std::basic_ofstream::open(std::__cxx11::string&, const openmode&)'

open(std::__cxx11::string& ...它清楚地說,該文件名的數據類型應該是string&。這表明你有一個數據類型錯誤,這是真的,因爲你使用了char而不是string

另一件事:只有當你想接受單個字母作爲輸入使用CHAR;當你想採取一個詞或一個句子,其存儲在一個字符串變量,並使用getline()功能從用戶那裏得到它。這會讓你的生活更輕鬆。


修改代碼,首先改變你的變量聲明聲明:

string fileName; // std:: is not required as you have the line "using namespace std" 

其次,從cin >> filename;更改文件名的輸入語句:

getline(cin, fileName); 

它應該在這些變化之後工作。


編輯:我找到了你的問題peoblem。你會中堂改變open命令:

myFile.open(fileName.c_str(), ios::out); 

就像在錯誤說,該功能需要傳遞到加時賽的字符串,然而,當我們把字符串作爲輸入,並將其存儲在變量文件名,它只是將字符串轉換爲一個const char *。這是不可見的,當你運行該代碼,但每過一段時間,它會導致一個錯誤。

這絕對應該現在的工作。

+0

我已經做了這些改變,仍然得到一個錯誤,我試圖打開文件(「myFile.open(fileName,ios :: out);)已經嘗試用「wfldfl」代替fileName,並且運行正常 –

+0

***並且仍然出現錯誤***除非您指定錯誤消息的確切文本,否則沒有人可以提供幫助 – drescherjm

+0

同意@drescherjm。指定什麼錯誤消息說,錯誤消息來自哪行,這可能有助於我們解決您的問題 –

相關問題