使用fstream和cstring写入文件

时间:2014-10-31 15:54:11

标签: c++

    #include <fstream>
#include <iostream>
#include <cstring>
using namespace std;


int main()
{
        char filename[20] = "filename";
        char userInput;

        ofstream myFile;


        cout << "Enter filename: ";
        cin.getline(filename, sizeof(filename));


        myFile.open(filename);
        if(myFile.fail())
        {
                cout << "Error opening file: "
                << filename << "\n";
                return 1;

        }

        cout << "Add text to the file: ";
        cin.get(userInput);

        while(cin.good() && userInput)
        {
                myFile.put(userInput);
                cin.get(userInput);

        }


        myFile.close();
        return 0;



}

我无法在没有强制退出的情况下终止输入(它仍然写入文件)。

这就是我应该做的事情

从用户接收一行输入,然后输出 到给定文件的行。这将一直持续到输入行 用户是“-1”表示输入结束。

然而,我无法解决-1部分问题。任何帮助都会受到高度赞赏,其他一切似乎都有效。

2 个答案:

答案 0 :(得分:0)

你让事情变得比他们需要的要复杂得多。例如,为什么使用C字符串而不是std::string?使用正确的(标准提供的)类通常会导致更短,更简单和更易于理解的代码。为初学者尝试这样的事情:

int main()
{
    std::string filename;

    std::cout << "Enter filename" << std::endl;
    std::cin >> filename;

    std::ofstream file{filename};

    std::string line;
    while (std::cin >> line) {
        if (line == "-1") {
            break;
        }
        file << line;
    }
}

答案 1 :(得分:0)

首先,作业要求从用户读取get()的字符输入不应该是要使用的功能。像使用成员函数getline()一样接收文件名并使用比较函数来检查-1

for (char line[20]; std::cin.getline(line, sizeof line) && std::cin.gcount(); )
{
    if (strncmp(line, "-1", std::cin.gcount()) == 0)
        break;
    myFile.write(line, std::cin.gcount());
}