C++ c++;不为文件工作
我用代码块编写了下面的代码,由于我是编程新手,我想用简单的话来了解这个问题。如果open()构造函数不存在,它是否会创建新文件C++ c++;不为文件工作,c++,file,C++,File,我用代码块编写了下面的代码,由于我是编程新手,我想用简单的话来了解这个问题。如果open()构造函数不存在,它是否会创建新文件 #include<iostream> #include<fstream> #include<cstring> using namespace std; int main() { char str[80]; cout<<"Enter a string : ";cin>>str; int len=str
#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;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
char-str[80];
库斯特;
int len=strlen(str);
流文件;
打开(“文本”,ios::in | ios::out);
对于(int i=0;i以下代码更适合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;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
字符串str;
字符串newStr;
cout>str;
int len=str.length();
流文件;
打开(“TEXT”,ios::out | ios::in);
如果(!file.is_open())
返回0;
文件newStr;
cout我认为您没有“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;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
char-str[80];
cout>str;
int len=strlen(str);
流式流量计;
fout.open(“TEXT.txt”);
对于(int i=0;i什么使您相信存在问题?您期望的结果是什么,您观察到的结果是什么,两者有何区别?鉴于您从未检查流的状态,您有多确定文件是否已打开?请尽可能使用std::string
而不是一些随机长度的C样式字符数组。放置空格您的代码中有,以使其可读。此外,我花了一些时间才发现此图表()超出了标准。它本身并不是很有用的答案,但如果您将其与此处的图表结合使用()你会看到哪里出了问题。几乎完全正确,但是你需要读一读并快速改正。IoSoo::EOF在文件到达文件结束时返回true,在其他情况下返回false。因此,使循环保持“不”结束,第二个完全是C++中正确的方式,但是<>代码的大问题。(!fin.eof())
是否在读取和查找eof之前测试eof。fin.seekg(k);
或fin.get(ch);
可能因任何原因失败,包括查找eof和仍在使用的ch
,可能会打印垃圾。此外,如果在查找文件结尾之前读取失败,您将有一个无限循环,因为您永远无法到达文件结尾。我认为提问者的问题只是“无法打开文件”。所以我没有考虑读循环。在这种情况下,seekg()不需要。fstream::get()自动增加游标指针,这样您就可以删除seekg()。但第一个循环最后还是打印了两次相同的字符。这是因为字符串末尾有“\0”字符。因此,您应该在每个循环中清除ch。感谢您在重新读取时修复我的错误,这更合适,但会重复询问者的错误,无法解决问题
#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;
}