gpt4 book ai didi

c++ - seekg 的第二次调用不起作用

转载 作者:行者123 更新时间:2023-11-30 00:52:52 25 4
gpt4 key购买 nike

在下面的代码中,我计算了字数、行数,然后计算了文本文件的大小。第一次使用 seekg 在第一个 while 循环后工作正常,但在第二个 while 循环后,它不起作用。它给出输出中所示的值。

#include <iostream>
#include <fstream>
using namespace std ;

int main(void)
{
fstream txtFile;
txtFile.open("test.txt");

if(txtFile.is_open())
{
printf("txt file is opened");
}

//number of words and lines in txt file
int w=0 , l =0 ;
int c , start , end;
string s;

while(1)
{
if(txtFile.peek() == -1)
break;
c = txtFile.get();
if(c != txtFile.eof())
w++;
}

txtFile.seekg(0,ios::beg);

while(getline(txtFile,s))
{
l++ ;
}
printf("no of words : %d , no of lines: %d\n",w,l);

//calculate the size of both the files
txtFile.seekg(0,ios::beg);
start = txtFile.tellg();
printf("%d\n",start);;
txtFile.seekg(0, ios::end);
end = txtFile.tellg();
printf("%d\n",end);;

return 0 ;
}


OUTPUT
txt file is opened
no of words : 128 , no of lines: 50
-1
-1

最佳答案

最后的输入操作导致设置失败位。如果您在设置此位时调用 tellg,它也会失败。在调用 tellg() 之前,您需要先调用 clear()

txtFile.clear(); // clear fail bits
txtFile.seekg(0,ios::beg);

关于c++ - seekg 的第二次调用不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18025282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com