我最近开始使用文件,但在我的主要大学项目中实施它们时遇到了一些麻烦。
以下代码计算您输入数字并按 Enter 所需的时间,并将用户的姓名、性别和时间写入文件中:
#include <iostream>
#include <ctime>
#include <fstream>
#include <string>
using namespace std;
int LinesCounter(string filename)
{
ifstream b_file(filename);
// new lines will be skipped unless we stop it from happening:
b_file.unsetf(ios_base::skipws);
// count the newlines with an algorithm specialized for counting:
unsigned line_count = count(
istream_iterator<char>(b_file),
istream_iterator<char>(),
'\n');
return line_count;
}
int main()
{
//Starts timing
clock_t begin = clock();
int letter;
cin>>letter;
cin.ignore();
//Obtains the total amount of seconds taken
clock_t end = clock();
double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;
cout << "\nCongratulations, you took " <<elapsed_secs <<" seconds." <<endl <<endl;
cout<<"Insert your name: ";
string name;
getline(cin, name);
cout<<endl;
cout<<"M/F: ";
char sex;
cin >> sex;
cout<<endl;
cin.ignore();
int NumberOfLines = LinesCounter("Times.txt");
if (NumberOfLines < 10)
{
ofstream a_file ( "Times.txt", ios::app );
a_file<<name <<" " <<sex <<" " <<elapsed_secs <<"s" <<endl;
a_file.close();
}
cin.get();
}
该代码应该只存储 10 次(10 行包含姓名、性别和时间),并且必须根据时间整理列表。这样,文件的第一行应该有最快的时间(以及相应的用户的姓名和性别),最后一行的时间最慢。例子:
1)“时代.txt”
- 约翰 M 1.449s
- 丽兹 F 1.552s
- 埃利亚斯 M 1.788s
新时间:Albert M 1.522s
“Times.txt” - 更新
- 约翰 M 1.449s
- 阿尔伯特 M 1.522s
- 丽兹 F 1.552s
- 埃利亚斯 M 1.788s
2)“时代.txt”
- 约翰 M 1.449s
- 阿尔伯特 M 1.522s
- 丽兹 F 1.552s
- 埃利亚斯 M 1.788s
- 抢 M 1.819s
- 乔 M 1.842s
- 灰 M 1.893s
- 珊莎 F 2.108s
- 雪 M 2.134s
- 安迪 M 2.333s
新时间:Ana F 1.799s
“Times.txt” - 更新
- 约翰 M 1.449s
- 阿尔伯特 M 1.522s
- 丽兹 F 1.552s
- 埃利亚斯 M 1.788s
- 安娜 F 1.799s
- 抢 M 1.819s
- 乔 M 1.842s
- 灰 M 1.893s
- 珊莎 F 2.108s
- 雪 M 2.134s
可能的解决方案:我考虑过每次移动到一个数组位置并在数组中将它们排序,然后重写文件。问题是,我不知道如何以这种方式操作代码。任何帮助将不胜感激。
*注意:文件不应在名称前显示职位编号