程序似乎是跳过函数调用

时间:2016-06-30 02:13:03

标签: c++

我似乎无法让程序调用第二个函数。该程序应该打开一个笑话文件,读取它并为用户显示它。然后关闭文件,打开第二个穿孔文件,寻找最后一行并将其读给用户。我得到它打开第一个文件并显示笑话,但之后它没有做任何事情。知道我做错了什么吗?先感谢您。

{{1}}

2 个答案:

答案 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以查找文件中的最后一行。