C++ c++;不为文件工作

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

我用代码块编写了下面的代码,由于我是编程新手,我想用简单的话来了解这个问题。如果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);
  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;
}