【发布时间】:2019-11-18 13:06:39
【问题描述】:
在尝试使用 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
【问题讨论】:
-
"我的问题是为什么文件指针会停在它遇到的第一个字符处?" - 因为这是设计决定。 “我认为它只会将字符转换为 ASCII 整数,或者只是像制表符或空格一样跳过它”——当然可以,但负责人却选择了其他方式。行为是这样的,问为什么是这样的,在这种情况下,是毫无意义的,除非被问到做出那个决定的人。我们现在可能只是推测 - 这似乎是最直观的方法。
-
你想读取一个int,但是遇到'a',它不是一个int,所以读取停止。这就是全部的魔力......
-
“我认为它只会将字符转换为 ASCII 整数或直接跳过它”。所以事实证明并非如此。现在怎么办?你有 B 计划吗?
-
@n.'pronouns' 是的,只需将 a1 的类型更改为 char。
-
@Fureeish thx 我想这是最合理的解释。
标签: c++ file-io type-conversion fstream