我有以下代码:
void readFile(BST *tree) {
ifstream infile("input.txt");
long int sid, t;
string l, f, h;
while (infile >> sid >> l >> f >> h >> t) {
// The line below is for debug purposes
cout << "\"" << sid << "\" \"" << l << "\" \"" << f << "\" \"" << h << "\" \"" << t << "\"" << endl;
tree->insert(sid, l, f, h, t);
}
infile.close();
}
以下是一个示例行:
78832112 Bruno Nicholas 32_Sugar_Rd_PA_12345 3026821712
有趣的是,我的代码没有从这一行读取任何内容。更有意思的是,如果我从最后一个数字中删除任何数字,它就会很好地读取它。
我不知道导致这种行为的原因。有什么想法吗?
答案 0 :(得分:1)
嗯,这个数字对于你的平台来说太大了long
...你可以使用uint64_t
或类似的东西为你的程序提供更多的喘息空间,和/或你必须文档您的文件格式以及您的格式可以支持的有效值范围的限制。
永远不要忘记编程只是I / O的一半。另一半是文档。没有格式规范,I / O就没什么了。
答案 1 :(得分:1)
你需要使用64位整数来保存那么大的东西。在大多数平台上,long int
是32位。根据您的编译器和平台,您可以使用long long
,int64_t
或编译器支持的任何内容。
答案 2 :(得分:1)
值得注意的是,sid
,l
,f
和h
的读取按顺序一次填充,因此它们实际上已成功因为该行末尾的违规数字尚未被读取,因此您的声明“有趣的是我的代码不会读取此行中的任何内容”是不正确的。该程序读取大部分行,但它无法处理最后一个整数,因此整个读取操作返回false
,并且您永远不会进入循环内部来使用您刚刚读取的数据。