2017-10-09 107 views
0

我應該在名爲「mydata.txt」的文件內打印(x,y)值。但出於某種原因,我收到以下錯誤消息:「錯誤:無法打開輸出文件mydata.txt」我不確定程序是否應該創建文本文件,或者我應該創建該文件。我試過後者,但它仍然無法工作。這裏是我的代碼:使用流寫入文件

#include "std_lib_facilities_5.h" 

class Point{ 
    public: 

    int x; 
    int y; 

    // Coordinate members x and y 
    Point(int nn = 0 , int mm = 0): x(nn), y(mm){} 
    friend ostream& operator<< (ostream &out, const Point &point); 
}; 

ostream& operator<<(ostream& os, const Point& point){ 
    os << point.x << " " << point.y; 
    return os; 
} 

int main() 
try { 
    int x1, x2; 
    vector<Point> original_points; 

    for(int i = 0; i < 7; ++i) { 
     cout << "Please input coordinate points as (x,y): "; 
     cin >> x1 >> x2; 
     original_points.push_back(Point(x1,x2)); 
    } 
    for(int i = 0; i < 7; ++i){ 
     cout << "Original points: " << original_points[i] << endl; 
    } 
    string outputFile = "mydata.txt"; 
    ofstream ost {"mydata.txt"}; 
    ost.open(outputFile,ofstream::out); 
    if(!ost) error("can't open output file ", outputFile); 

    for(int i = 0; i < original_points.size(); ++i){ 
     ost << original_points[i] << " " << original_points[i]; 
    } 
    ost.close(); 
} 
catch (exception& e) { 
    cerr << "error: " <<e.what() << '\n'; 
    return 1; 
    } 
    catch (...) { 
     cerr << "Oops: unknown exception!\n"; 
     return 2; 
    } 

這裏是輸出,當我運行它:

Please input coordinate points as (x,y): 1 2 
Please input coordinate points as (x,y): 1 1 
Please input coordinate points as (x,y): 2 2 
Please input coordinate points as (x,y): 3 3 
Please input coordinate points as (x,y): 4 4 
Please input coordinate points as (x,y): 5 5 
Please input coordinate points as (x,y): 6 6 
Original points: 1 2 
Original points: 1 1 
Original points: 2 2 
Original points: 3 3 
Original points: 4 4 
Original points: 5 5 
Original points: 6 6 
error: can't open output file mydata.txt 
Program ended with exit code: 1 
+0

是的,我做到了。我創建了一個名爲「mydata.txt」的文件,並將它放在同一個文件夾中 –

+0

@ scohe001除非另有指定,否則打開輸出文件流將創建該文件。 – molbdnilo

回答

0

試試這個

#include "std_lib_facilities_5.h" 

class Point{ 
    public: 

    int x; 
    int y; 

    // Coordinate members x and y 
    Point(int nn = 0 , int mm = 0): x(nn), y(mm){} 
    friend ostream& operator<< (ostream &out, const Point &point); 
}; 

ostream& operator<<(ostream& os, const Point& point){ 
    os << point.x << " " << point.y; 
    return os; 
} 

int main() 
try { 
    int x1, x2; 
    vector<Point> original_points; 

    for(int i = 0; i < 7; ++i) { 
     cout << "Please input coordinate points as (x,y): "; 
     cin >> x1 >> x2; 
     original_points.push_back(Point(x1,x2)); 
    } 
    for(int i = 0; i < 7; ++i){ 
     cout << "Original points: " << original_points[i] << endl; 
    } 
    ofstream ost; 
    ost.open("mydata.txt"); 

    if(!ost) error("can't open output file ", "mydata.txt"); 

    for(int i = 0; i < original_points.size(); ++i){ 
     ost << original_points[i] << " " << original_points[i]; 
    } 
    ost.close(); 
} 
catch (exception& e) { 
    cerr << "error: " <<e.what() << '\n'; 
    return 1; 
    } 
    catch (...) { 
     cerr << "Oops: unknown exception!\n"; 
     return 2; 
    } 
+0

我們是否應該猜測其中的差異,或者可以解釋一下你所做的改變? –

+0

沒有錯誤,但它不創建文件。 –

+0

嘗試執行打開文件並向其寫入虛擬消息的代碼。然後關閉文件。 – Chris

1

ofstream ost {"mydata.txt"};打開該文件。

然後,您嘗試在下一行中再次打開它失敗,因爲它已經打開。
刪除第二行。

刪除行ost.close();當你在它的時候 - 析構函數會在你的時間關閉它。

+0

它還沒有創建文件。我應該把它放在同一個目錄 –

+0

@PapesTraore你知道嗎?因爲你的程序打印出錯誤或者你找不到它?該文件應該在程序的*工作目錄*中創建,並且如果您使用的是通常不在源代碼所在的IDE。 – molbdnilo

+0

我找不到它,你的意思是.cpp文件?我使用的是Xcode,但是我的作業裏面有一個文件夾。 –