2017-11-18 31 views
-1

我在代碼塊中編寫了下面的代碼,由於我是編程新手,我想用簡單的語言知道問題。如果open()構造函數不存在,是否會創建一個新文件?C++中的get()函數不能用於文件

#include<iostream> 
#include<fstream> 
#include<cstring> 
using namespace std; 
int main() 
{ 
    char str[80]; 
    cout<<"Enter a string : ";cin>>str; 
    int len=strlen(str); 
    fstream file; 
    file.open("TEXT",ios::in|ios::out); 
    for(int i=0;i<len;i++) 
    file.put(str[i]); 
    file.seekg(0); 
    char ch; 
    cout<<"\nPrintitng Contents....\n"; 
    int k=0; 
    while(file) 
    { 
    file.seekg(k); 
    file.get(ch); 
    cout<<ch; 
    k++; 
    } 

    return 0; 
} 
+0

是什麼讓你相信這是一個問題嗎?你期望的結果是什麼,你觀察到了什麼,以及這兩者有什麼不同? –

+3

看到你從來沒有檢查過的流的狀態你有多確定該文件甚至打開? – user4581301

+0

請儘可能*請*使用'std :: string'而不是一些隨機長度的C型字符數組。 – tadman

回答

-1

下面的代碼是更適合於C++,我認爲

#include<iostream> 
#include<fstream> 
#include<string> 
using namespace std; 
int main() 
{ 
    string str; 
    string newStr; 
    cout << "Enter a string : "; cin >> str; 
    int len = str.length(); 
    fstream file; 
    file.open("TEXT", ios::out| ios::in); 
    if (!file.is_open()) 
     return 0; 
    file << str; 
    file.seekg(0,file.beg); 
    char ch; 
    cout << "\nPrintitng Contents....\n"; 

    file >> newStr; 
    cout << newStr; 
    file.close(); 

    return 0; 
} 
+0

關於重讀,更合適,但重複提問者的錯誤,並沒有解決問題 – user4581301

0

我認爲你沒有 「TEXT」。和fstream :: open如果您想要讀取的文件不存在,則不會生成文件。

所以你可以嘗試在不同的流中讀取和寫入。

以下代碼將幫助您。

#include<iostream> 
#include<fstream> 
#include<cstring> 

using namespace std; 

int main() 
{ 
    char str[80]; 
    cout << "Enter a string : "; 
    cin >> str; 
    int len = strlen(str); 

    ofstream fout; 
    fout.open("TEXT.txt"); 

    for (int i = 0; i<len; i++) 
     fout.put(str[i]); 

    fout.close(); 

    ifstream fin; 
    fin.open("TEXT.txt"); 

    char ch; 
    cout << "\nPrintitng Contents....\n"; 

    while (!fin.eof()) 
    { 
     fin.get(ch); 
     cout << ch; 
     ch = NULL; 
    } 

    fin.close(); 

    return 0; 
} 

,你可以改善你的代碼是這樣

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

using namespace std; 

int main() 
{ 
    string str; 

    cout << "Enter a string : "; 
    cin >> str; 

    ofstream fout; 
    fout.open("TEXT.txt"); 

    fout << str; 

    fout.close(); 

    str.clear(); 

    ifstream fin; 
    fin.open("TEXT.txt"); 

    cout << "\nPrintitng Contents....\n"; 

    fin >> str; 
    cout << str; 

    fin.close(); 

    return 0; 
} 
+0

幾乎完全正確,但你需要給[爲什麼iostream :: eof內循環條件被認爲是錯誤的?](https:// stackoverflow .com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong)閱讀並進行快速更正。 – user4581301

+0

當cursur到達文件結尾時,iostream :: eof返回true,在其他情況下返回false。所以讓循環保持循環而「不」結束文件。 –

+0

第二個完全是在C++中完成它的正確方法,但是'while(!fin.eof())'的大問題是它在讀取和查找eof之前測試eof。 'fin.seekg(k);'或'fin.get(ch);'可能因任何原因失敗,包括髮現eof和'ch'仍在使用,可能會打印垃圾。另外,如果在找到文件結尾之前讀取失敗,則會出現無限循環,因爲您永遠無法到達文件末尾。 – user4581301