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

Writing to a file, compiles, creates a file but doesn't write

我已经阅读了 "The Questions that may already have your answer" 的答案,但对我没有帮助。

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

我想编写一个程序,其中

  1. 用户输入他们想要创建的文件的名称。

然后

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

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

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

例如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,程序会在我只输入两行后关闭。

你能告诉我我做错了什么吗?

您有两个 ostream,startout。您将 out 附加到文件(不写入任何内容),然后写入 start(不附加任何内容)。

除了 Beta 的答案外,cin>> 会在用户按下回车键时在缓冲区中留下换行符。 getline() 在用户按下输入 "skip" 输入时读取此内容。

在使用 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;
}