Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 每次我通过ifstream读取特定输入时,输入都会发生变化,可能会出现int溢出_C++_Io_Integer Overflow - Fatal编程技术网

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

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

每次我使用ifstream为我的程序输入大的输入,我都会得到一些奇怪的东西。我觉得这与整数溢出有关,但我的程序仍然不能处理无符号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;
}
以下是我从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";
}