为什么当我尝试将char输入到int时,文件指针会卡住

Why does the file pointer stuck when I try to input char to int?

本文关键字:文件 指针 int 输入 char 为什么      更新时间:2023-10-16

当我试图用c++从.txt文件中读取数据时,我遇到了一个奇怪的现象,当我的程序试图将char输入到int变量(例如a1(时,它会被困在While循环中。

我知道,如果我将int a1 = 0;更改为char a1;,下面代码的问题就可以解决。我的问题是,为什么文件指针会停在它遇到的第一个字符上?我想它只会把字符变成ASCII整数,或者简单地跳过它,就像它是一个制表符或空格一样。

下面是我用来测试这个的代码。

#include<iostream>
#include<fstream>
using namespace std;
int main(){
ifstream in;
int a1=0;
int a2=0,a3=0,a4=0;
in.open("input.txt");
while(!in.eof()){
in >> a1 >> a2 >> a3 >> a4;
cout << a1 << " "<< a2 << " "<< a3 << " "<< a4<<endl;
cout << SEEK_CUR <<endl;
}
return 0;
}

下面是"input.txt">

a         42          94          32    
b         33          19          82    
c         88          40          18    
d         92          45          19    
e         77          25          84    

输出为

0 0 0 0
1
0 0 0 0
1
0 0 0 0
1
.
.
and so on

istream中的操作是类型安全和类型敏感的。

operator>>:

如果提取失败(例如,如果在需要数字的地方输入了一个字母(,则不修改值,并设置故障位。(直到C++11(

如果提取失败,则将0写入值,并设置故障位。如果提取导致值太大或太小而无法放入值,则写入std::numeric_limits:max((或std::numeric_limits::min((,并设置故障位标志。(自C++11起(

基本上,你无法读取任何数据,因此,你无法到达文件的末尾,这就是无限循环的原因。