我似乎无法让程序调用第二个函数。该程序应该打开一个笑话文件,读取它并为用户显示它。然后关闭文件,打开第二个穿孔文件,寻找最后一行并将其读给用户。我得到它打开第一个文件并显示笑话,但之后它没有做任何事情。知道我做错了什么吗?先感谢您。
{{1}}
答案 0 :(得分:1)
seekg
在文件中取一个偏移量 - 你传递的是'/n'
,它不是偏移量。
因为您使用了正斜杠(/
)而不是反斜杠(\
),所以编译器将'/n'
视为Unicode或多字节字符序列并向前移动12142字节(至少在VS 2013中),这可能超过了文件的结尾。
此外,您的评论说"快进到文件的末尾",但您使用的是ios:beg
,这是文件的开头。
答案 1 :(得分:0)
punchline.seekg(0L, ios::beg); // Fast forward to the end of the file
不,它没有。这快速转发到文件的开头,这是" ios :: beg"装置
punchline.seekg('/n', ios::cur); // rewind the the new line character
尽管如此,这并没有回到换行符。它不会回退到第一个换行符,它不会将它倒回到最后一个换行符。如所示,seekg()
总是将get指针定位在固定的偏移处。而且,在这里,固定偏移完全没有意义。
您的编译器可能会抱怨此行。不要忽视编译器的抱怨,即使它仍然编译代码,无论如何。
有关一种可能的算法,请参阅this question以查找文件中的最后一行。