C ++将字符串写入文本文件中的一行;新行问题\ n无效

时间:2017-11-03 00:49:51

标签: c++ database file ifstream

我正在编写一个包含许多功能的数据库程序(读取,写入,删除,搜索,登录等),我的写作功能刚刚停止工作(3天前工作),我不知道发生了什么变化。我的写作功能(void savescore)应该写我的输入(cin用户名和密码),然后移动到下一行,这样我可以在下次决定去写文件时输入更多信息。现在,它只是在写我最后的内容。

test2.txt - 用户名,密码

然后我去编辑并输入" User,Pass"这就是发生的事情

test2.txt - 用户,传递

我想让它在下一行输入,我做了#34; \ n"有人可以给我一些帮助吗?感谢

代码:

#include <iostream>
#include <stdlib.h>
#include <windows.h>
#include <fstream>
#include <conio.h>
#include <string>
#include <math.h>

using namespace std;

// Variables
string username;
string password;

//alphabet order functions

// Functions
void SaveScore()
{
  ofstream Database;
Database.open("test2.txt");
Database << username << " " << password << "\n";


Database.seekp(0,std::ios::end); //to ensure the put pointer is at the end
Database.close();
}

int main()
{

    int db;

    char ans;

    string save;

    string file;

    ifstream fin;
    ofstream fout;
    string searchpar;

    char repeat;
    bool loop = true;
    while (loop == true)
    {

        cout << "WELCOME TO MY DATABASE\n\n";
        cout << "To view the database, press 1\nTo edit the database, press 2\nTo search the database, press 3\nTo log in, press 4\n";
        cin >> db;
        system("CLS");

        if (db == 1)
        {
            cout << "Here is the database: \n\n";

            string line;

            ifstream myfile("test2.txt");
            if (myfile.is_open())
            {
                while (getline(myfile, line))
                {
                    cout << line << '\n';

                }

            }

            //open while bracket
            cout << "\n\nWould you like to return to the menu(y/n)?";
            cin >> repeat;

            if (repeat == 'y')
            {
                loop = true;
            }

            else if (repeat == 'n')
            {
                loop = false;
            }
            system("CLS");

        }

        else if (db == 2)
        {

            cout << "Please enter your username : ";
            cin >> username;

            cout << "\nPlease enter your password: ";
            cin >> password;

            SaveScore();

            cout << "\n\nWould you like to return to the menu(y/n)?";
            cin >> repeat;

            if (repeat == 'y')
            {
                loop = true;
            }

            else if (repeat == 'n')
            {
                loop = false;
            }
            system("CLS");

        }
    }

}

1 个答案:

答案 0 :(得分:0)

你说你的节目是

  

每当我尝试将新内容写入其中时替换文本文件的第一行

事实证明,这正是你要求它做的。考虑:

Database << username << " " << password << "\n";
Database.seekp(0,std::ios::end); //to ensure the put pointer is at the end

您正在打开文件(当写入指针从文件的开头开始,写入一些数据,然后寻找到最后。寻找到最后并不会改变您已经编写文本的事实。交换上面的行的顺序,以获得你想要的。

或者,您可以使用以下方式在“追加”模式下打开文件:

Database.open("test2.txt", std::ios::app);

在这种情况下,您可以完全省略对seekp的调用,因为所有数据都将自动写入文件的末尾。有关此问题的完整文档,请参阅http://en.cppreference.com/w/cpp/io/basic_ofstream/basic_ofstream