我有一个如下所示的测试文件:
.state('dashboard', {
parent: 'baseState'
url: '/dashboard',
templateUrl: 'partials/dashboard.html',
controller: 'DashboardController',
...
})
代码如下:
Ampersand Gregorina 5465874526370945
Anderson Bob 4235838387422002
Anderson Petunia 4235473838457294
Aphid Bumbellina 8392489357392473
Armstrong-Jones Mike 8238742438632892
我能够检索列表中除第一条记录外的所有记录。似乎seekg正在寻找正确的位置,但cardNumbers没有读取正确的信息。当'中间''设置为0,seekg应该寻找第0行,(中间* 57),读入Ampersand Gregorina并进行比较。相反,它仍在阅读安德森鲍勃。
关于为什么会发生这种情况的任何想法?
由于
答案 0 :(得分:0)
LineNumbers正在被循环修改,从4到1,再到-1。 -1会使你的循环太早终止,所以你不能正确地拿起第一个条目。
这似乎是一个家庭作业问题,所以我希望你可以用它来引导自己找到答案。
答案 1 :(得分:0)
使用seekg
等功能时,最好以binary mode
打开文件,而不是文本模式,因为您的代码现在正在执行。换句话说,你应该这样做:
cardNumbers.open(fileName, std::ios::in | std::ios::binary);
原因是在文本模式下打开文件将允许完成行尾翻译。这会使seekg
,tellg
等函数在不稳定(或幸运工作)之间产生最佳效果,在最坏的情况下,对文本处理无用。
当以二进制模式打开文件时,seekg
和其他系列函数按预期工作,因为没有完成行尾转换。实际上,您将在您指定的文件中寻找字节偏移量,而不会被行尾翻译抛弃。
此外,执行此操作后,行中数据的长度不仅包括可见文本,还包括构成行尾序列的不可见字符。因此,在二进制模式下,57的手计算不正确 - 它应该是58或59,具体取决于您是分别使用Linux / Unix还是Windows。