您好我一直在尝试编写一个程序,其中编译器从txt文件中获取分数并按升序输出它们但是它没有任何关于错误的想法吗?我怎么能把它变成一个数组?
这是我正在使用的infile.txt:
1 John Doe 23567
2 Larry Bird 21889
3 Michael Jordan 21889
4 James Bond 13890
5 Gary Smith 10987
6 GJ 9889
7 Vivien vien 8990
8 Samantha Carl 6778
9 Gary Lewes 5667
10 Sybil Saban 4677
该计划:
#include <iostream>
#include <fstream>
#include <string>
using std::ifstream;
using namespace std;
int main ()
{
ifstream file_("infile.txt");
int highscore;
std::string name;
int id;
if (file_.is_open())
{
while(file_>>id >> name >> highscore)
{
std::cout<<id << " " <<name << " " <<highscore<<"";
}
file_.close();
}
system ("pause");
return 0;
}
答案 0 :(得分:0)
使用时
file_>> id >> name >> highscore
只读取第一个名称,没有任何内容被读入highscore
,流进入错误状态,循环立即中断。
您需要使用:
std::string firstName;
std::string lastNmae;
file_ >> id >> firstName >> lastName >> highscore
<强>更新强>
存在
6 GJ 9889
文件中的使得简单阅读文件变得困难。你必须使用完全不同的策略。
这就是我的想法:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
using std::ifstream;
using namespace std;
int main ()
{
ifstream file_("infile.txt");
int highscore;
std::string name;
int id;
if (file_.is_open())
{
std::string line;
while ( getline(file_, line) )
{
std::string token;
std::istringstream str(line);
std::vector<std::string> tokens;
while ( str >> token )
{
tokens.push_back(token);
}
size_t numTokens = tokens.size();
if ( numTokens < 2 )
{
// Problem
}
else
{
id = std::stoi(tokens[0]);
highscore = std::stoi(tokens.back());
name = tokens[1];
for ( size_t i = 2; i < numTokens-1; ++i )
{
name += " ";
name += tokens[i];
}
std::cout << id << " " << name << " " << highscore << std::endl;
}
}
}
}
答案 1 :(得分:0)
在结构中收集所有这些数据点,并将输入解析为这些结构的数组。
解析输入时,需要注意: 1)如何&gt;&gt;实际上有效 2)指定的输入文件的名称为1和2个单词 3)字符串可以访问+ =运算符,这可能很方便。
完成此操作后,您将需要按其分数成员对此结构数组进行排序,然后按顺序输出数组。