每次我使用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
我不知道造成这种情况的原因。任何帮助都会很棒。
答案 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。