我正在编写一个包含许多功能的数据库程序(读取,写入,删除,搜索,登录等),我的写作功能刚刚停止工作(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");
}
}
}
答案 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。