写入文件,编译,创建文件但不写入

时间:2015-12-21 14:33:30

标签: c++ string file fstream ofstream

我已经阅读了“可能已经有你答案的问题”的答案,但这对我没有帮助。

我想我的问题有一个快速的解决方案。

我想写一个

的程序
  1. 用户输入他们想要创建的文件的名称。
  2. 然后

    1. 在同一行中,他们输入一个整数=新创建的txt文件的文本行数。

    2. 在新行中,用户输入文本的第一行,在新行中输入下一行,依此类推。

    3. 所有这些行都保存到创建的文件中。

    4. 例如file.txt 3

      bhjudshsu 565 jdd
      hcxjs
      jdckisa jsdjs
      

      打开名为file.txt的文件后,我应该看到文本的上面三行。

      这是我的代码示例:

      #include<iostream>
      #include<string>
      #include<fstream>
      
      using namespace std;
      
      int main()
      {
          int amount;
          string fileName, line;
      
          ofstream start;
      
          cin>>fileName>>amount;
      
          ofstream out(fileName.c_str());
      
          for(int i=0; i<amount; i++)
          {
              getline(cin, line);
              start<<line<<endl;      
          }
          start.flush();  
          start.close();
      
          return 0;
      }
      

      问题是文件已创建,但它是空的。

      此外,如果我输入file.txt 3,我只输入两行后程序就会关闭。

      你能告诉我我做错了吗?

2 个答案:

答案 0 :(得分:3)

您有两个ostream,startout。您将out附加到文件(并且不对其写入任何内容),并写入start(没有附加任何内容)。

答案 1 :(得分:1)

除了Beta的回答,cin&gt;&gt;当用户按下回车键时,将在缓冲区中留下换行符。当用户按下Enter键“跳过”输入时,getline()读取此内容。

在使用getline()之前,您可以使用cin.ignore()来删除这些额外的字符。

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

using namespace std;

int main()
{
    int amount;
    string fileName, line;
    cin >> fileName >> amount;
    ofstream start(fileName.c_str());

    for(int i = 0; i < amount; i++)
    {
        cin.ignore();
        getline(cin, line);
        start << line << endl;
    }

    start.flush();
    start.close();
    return 0;
}