我正在扫描文本文档,其格式如下:
3 10
1
2
2
1
3
1
1
1
2
2
顶部的前两个整数分别代表候选人数和投票数。我在检查投票数量的字符串时遇到了困难,“10”
由于我在c ++工作,到目前为止我已经尝试过这样做了:
string line;
int candidateTally;
int voteTally;
ifstream file("votes.txt");
//detect the candidate tally "3"
getline(file, line);
candidateTally = atoi(line.c_str());
cout << candidateTally << endl;
//output the candidate tally "10" but it's only outputting "1"
getline(file, line);
cout << line;
我不太确定如何获取0的第二个字符串以获得“10”的完整字符串 看起来getline函数在获取0之前会中断,因为这可能代表'\ n'char? 我想拥有它以便它检测到'0'并将其包含在字符串中,并带有“1”,以便我可以将其转换为它应该是的int,10。
我该如何解决这个问题?
答案 0 :(得分:6)
问问自己getline
做了什么......是的,它 行。
所以第一次调用“获取”整行“3 10”,第二次调用获取文件中的下一行:“1”
您应该使用>>
运算符从文件中读取传入的值。这也将消除弄乱atoi()
和char指针的需要。
答案 1 :(得分:2)
请改用以下内容:
int candidateTally;
int voteTally;
ifstream file("votes.txt");
//detect the candidate tally "3", and the vote tally "10".
file >> candidateTally >> voteTally;
cout << candidateTally << endl;
cout << voteTally << endl;
operator>>
忽略空格。它的第一个调用(file >> candidateTally
)将“吃掉”“3”,第二个调用(>> votetally
)将跳过空白,然后选择“10”。精度可以读取here,但细节很难阅读。
答案 2 :(得分:1)
如果您想获得候选人和投票人数,我们没有理由使用atoi
:
std::string line;
int candidateTally;
int voteTally;
std::ifstream file("votes.txt");
if (std::getline(file, line))
{
std::istringstream iss(line);
iss >> candidateTally >> voteTally; // you should also add error handling here
// ...
}
else
{
// handle the error here
}