2017-11-18 30 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