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

当尝试使用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
zhu033033 回答:当我尝试将char输入到int时,为什么文件指针卡住了?

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

operator>>

  

如果提取失败(例如,如果在期望数字的位置输入了字母),则值将保持不变,并设置故障位。 (直到C ++ 11)

     

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

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

本文链接:https://www.f2er.com/3080848.html

大家都在问