每次我通过ifstream读取特定输入时,输入都会发生变化,可能会溢出

时间:2014-06-08 03:17:01

标签: c++ io integer-overflow

每次我使用ifstream输入我的程序进行大输入时,我都会感到很奇怪。我有一种感觉这与整数溢出有关,但我的程序仍无法使用unsigned long long。这是我的代码的简化版本,仍然显示错误:

#include <iostream>
#include <fstream>

using namespace std;
int main(){
    ofstream fout ("namenum.out");
    ifstream fin ("namenum.in");
    unsigned long long serial;
    fin >> serial;
    ifstream myReadFile;
    cout << serial << endl;
    return 0;
}

这是奇怪的输入(或更大的输入):

5747867437

以下是我从cout获得的输出:

1452900141

我不知道造成这种情况的原因。任何帮助都会很棒。

2 个答案:

答案 0 :(得分:1)

以下是我以前几乎没有给出过的建议:始终检查您之后的输入您试图阅读(感觉,我已经给出了这个建议几千次)所以很容易错过)。流无法预测您要阅读的内容,并确保它可以正常运行:

if (fin >> searial) {
    fout << serial << '\n';
}
else {
    std::cerr << "failed to read the value\n";
}

查看您的代码,我大约100%确定文件无法打开(即在尝试阅读之前流处于错误状态)或声明的内容不在文件。

答案 1 :(得分:0)

首先,您提供的数字肯定在无符号长long的限制范围内。 其次,使用&gt;&gt;对于unsigned long long,需要C ++ 11支持。 C ++ 0x支持unsigned long。

我复制了你的代码并创建了一个名为&#34; namenum.in&#34;,typed&#34; 5747867437&#34;进入&#34; namenum.in&#34;使用UTF8编码。

然后输出正好是5747867437。