C++ 每次我通过ifstream读取特定输入时,输入都会发生变化,可能会出现int溢出
每次我使用ifstream为我的程序输入大的输入,我都会得到一些奇怪的东西。我觉得这与整数溢出有关,但我的程序仍然不能处理无符号long。下面是我的代码的简化版本,它仍然显示错误:C++ 每次我通过ifstream读取特定输入时,输入都会发生变化,可能会出现int溢出,c++,io,integer-overflow,C++,Io,Integer Overflow,每次我使用ifstream为我的程序输入大的输入,我都会得到一些奇怪的东西。我觉得这与整数溢出有关,但我的程序仍然不能处理无符号long。下面是我的代码的简化版本,它仍然显示错误: #include <iostream> #include <fstream> using namespace std; int main(){ ofstream fout ("namenum.out"); ifstream fin ("namenum.in"); un
#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;
}
以下是我从cout获得的输出:
1452900141
我不知道是什么原因造成的。任何帮助都是很棒的。这里是我以前很少给出的建议:总是在你尝试阅读后检查你的输入(感觉上,我给出这个建议只有几千次,所以很容易错过)。流无法预测您将要阅读的内容并确保其工作正常:
if (fin >> searial) {
fout << serial << '\n';
}
else {
std::cerr << "failed to read the value\n";
}
if(fin>>searial){
首先,你方提供的数量肯定在无符号长-长限制之内。
第二,使用无符号长long使用C++ 11支持。C++ 0x支持未签名long。
我复制了您的代码并创建了一个名为“namenum.in”的文件,使用UTF8编码将“5747867437”键入“namenum.in”
然后输出正好是5747867437。我会输入错误检查代码,以确保fin
有效且fin>>serial;
成功。将serial
初始化为与输入文件中不同的已知数字也可能会暴露问题。如果使用的是unsigned long
,则输入远远不够大,不足以导致溢出。请参见此处:。这里是对代码的ideone检查,可以双重确定:。正如R Sahu提到的,我会检查以确保fin
有效。正如wolfPack88所说,我们无法重现此问题。唯一的罪魁祸首是文件。myReadFile
在这里做什么?在那里这里没有测试用例,发布的程序也没有本质上的错误。请使用勤奋和精确的调试技术,甚至在你求助于互联网之前!这里是我以前很少给出的建议
Satire?;PSarcasm,但它们都以Sa
开头!@ThePhD:
if (fin >> searial) {
fout << serial << '\n';
}
else {
std::cerr << "failed to read the value\n";
}