在处理 I/O 文件 C++ 时误解了 cin.unget() 的用法
Misunderstood the usage of cin.unget() while handling I/O files C++
例如,我有一个名为 Bjarne.txt
的文件,其中有整数:
16 2 3 4
我制作了一个程序来读取文件中可用的整数并在控制台中将它们输出给我 window,但是,我正在尝试使用 cin.unget()
并由此获得理解关于它的实际作用,这里是源代码:
#include <iostream>
#include <fstream>
using namespace std;
int main () {
ifstream ifs("Bjarne.txt");
int a;
for(int i = 0;i<4;++i){
ifs>>a;
cout<<endl<<a;
if(i==0){
ifs.unget();
}
}
输出为:
16 6 2 3
为什么输出是这样的? (应该是 16 2 3 4
),只有当我把 ifs.unget() 放在程序中时才会发生,所以我的问题是,使用 [=28 时 cin.unget() 的目的是什么=] 文件,为什么输出数字 6(作为 16 的一部分)?
在此先感谢您的帮助。
the documentation 有问题吗?
Makes the most recently extracted character available again.
在第一次循环迭代结束时,6
是最后提取的字符(作为提取的格式化 int
的最后一位,值为 16
)。
Unget 正是这样做的:它不得到它。
下一个操作要使用 6
。所以,惊喜,下次你会得到 6
。
例如,我有一个名为 Bjarne.txt
的文件,其中有整数:
16 2 3 4
我制作了一个程序来读取文件中可用的整数并在控制台中将它们输出给我 window,但是,我正在尝试使用 cin.unget()
并由此获得理解关于它的实际作用,这里是源代码:
#include <iostream>
#include <fstream>
using namespace std;
int main () {
ifstream ifs("Bjarne.txt");
int a;
for(int i = 0;i<4;++i){
ifs>>a;
cout<<endl<<a;
if(i==0){
ifs.unget();
}
}
输出为:
16 6 2 3
为什么输出是这样的? (应该是 16 2 3 4
),只有当我把 ifs.unget() 放在程序中时才会发生,所以我的问题是,使用 [=28 时 cin.unget() 的目的是什么=] 文件,为什么输出数字 6(作为 16 的一部分)?
在此先感谢您的帮助。
the documentation 有问题吗?
Makes the most recently extracted character available again.
在第一次循环迭代结束时,6
是最后提取的字符(作为提取的格式化 int
的最后一位,值为 16
)。
Unget 正是这样做的:它不得到它。
下一个操作要使用 6
。所以,惊喜,下次你会得到 6
。