代码如下:
#include <iostream>
#include <fstream>
using namespace std;
int main(void)
{
int id;
char name[50];
ifstream myfile("savingaccount.txt"); //open the file
myfile >> id;
cout << myfile.tellg(); //return 16? but not 7 or 8
cout << id ;
return 0;
}
1800567 Ho Rui Jang 21 Female Malaysian 012-4998192 20 , Lorong 13 , Taman Patani Janam Melaka Sungai Dulong
1。)我希望tellg()
返回7
或8
,因为第一行1800567
是7位数,所以流指针应放在此之后数字和字符串"Ho Rui Jang"
之前,但tellg()
返回16
。为什么会这样?
答案 0 :(得分:5)
这看起来更像是编译器错误(可能是gcc)
使用以下代码: -
#include <iostream>
#include <fstream>
using namespace std;
int main(void)
{
int id;
char name[50];
ifstream myfile("savingaccount.txt"); //open the file
cout << myfile.tellg()<<endl;
myfile >> id;
streamoff pos=myfile.tellg();
cout <<"pos= "<<pos<<'\n';
cout <<"id= " << id<<'\n' ;
return 0;
}
以下是输出: -
图片inpstr.exe
来自Visual studio's cl
而inp.exe
来自g++(gcc version 4.6.1 (tdm-1))
答案 1 :(得分:5)
有同样的问题。尝试读取文件流二进制文件:
<ListPreference
android:title="@string/notifications_feed_url"
android:key="feed_url"
android:entries="@array/rssNames"
android:entryValues="@array/rssFeeds"
android:defaultValue="News"/>
它对我有帮助
答案 2 :(得分:0)
这不是编译器错误。 tellg()
不保证从文件的开头返回偏移量。有一组最小的保证,例如,如果将tellg()
的返回值传递给seekg()
,则文件指针将位于文件中的相应点。
实际上,在unix下,tellg()
确实会从文件的开头返回一个偏移量。在Windows下,它会从文件开头返回一个偏移量,但仅在文件以二进制模式打开时才会返回。
但唯一真正的保证是从tellg()
返回的不同值将对应于文件中的不同位置。