我正在尝试从文件中读取两个数据,我遇到了两个问题:
我尝试过使用getline,但我无法让它正常工作。我已将我的代码包含在c ++,输入文件和下面的正确输出中。
正确的输出应为:
Num1 = 4FD37854
Num2 = E281C40C
我试图从名为input.txt的文件中读取两个数据:
4FD37854
E281C40C
这是我的计划:
#include <iostream>
#include <fstream>
using namespace std;
union newfloat{
float f;
unsigned int i;
};
int main ()
{
// Declare new floating point numbers
newfloat x1;
newfloat x2;
// Create File Pointer and open file (destructor closes it automatically)
ifstream myfile ("input.txt");
while (myfile >> hex >> x1.i) // Read until at EOF
{
myfile >> hex >> x2.i; // Read input into x2
cout << "Num1 = " << hex << x1.i << endl;
cout << "Num2 = " << hex << x2.i << endl;
} // end of file reading loop
return 0;
}
答案 0 :(得分:3)
while (!myfile.eof())
几乎总是错误的,并且会比您预期的时间多读一次。
你应该说
while(myfile >> hex >> x1.i >> x2.i)
但主要问题是E281C40C无法读入int
,您需要unsigned int
。
这也是你无限循环的原因 - 因为在到达文件末尾之前读取失败,!myfile.eof()
保持为真,并且读数仍然失败。
这是避免eof()
的另一个原因。
答案 1 :(得分:0)
所以,让我们看看第二个问题。
- 读取的第二个值由于某种原因读错了。
醇>
嗯,这实际上是输入问题。您输入的是0xE281C40C,而int的最大值是0x7FFFFFFF。您只需将newFloat的定义更改为:
即可union newfloat{
float f;
unsigned int i;
};
它将接受大于0x7FFFFFFF的值
- 无限循环
醇>
我不知道为什么会这样,而且我的机器上没有发生这种情况。但是,在你解决了第二个问题后,你的机器上可能不会发生这种情况。