C++中的get()函数不能用于文件
我在代码块中编写了下面的代码,由于我是编程新手,我想用简单的语言知道问题。如果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;
}
下面的代码是更适合于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;
}
关于重读,更合适,但重复提问者的错误,并没有解决问题 – user4581301
我认为你没有 “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;
}
几乎完全正确,但你需要给[为什么iostream :: eof内循环条件被认为是错误的?](https:// stackoverflow .com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong)阅读并进行快速更正。 – user4581301
当cursur到达文件结尾时,iostream :: eof返回true,在其他情况下返回false。所以让循环保持循环而“不”结束文件。 –
第二个完全是在C++中完成它的正确方法,但是'while(!fin.eof())'的大问题是它在读取和查找eof之前测试eof。 'fin.seekg(k);'或'fin.get(ch);'可能因任何原因失败,包括发现eof和'ch'仍在使用,可能会打印垃圾。另外,如果在找到文件结尾之前读取失败,则会出现无限循环,因为您永远无法到达文件末尾。 – user4581301
是什么让你相信这是一个问题吗?你期望的结果是什么,你观察到了什么,以及这两者有什么不同? –
看到你从来没有检查过的流的状态你有多确定该文件甚至打开? – user4581301
请尽可能*请*使用'std :: string'而不是一些随机长度的C型字符数组。 – tadman