C++ 当我输入一个大数字时,为什么我的计算器程序开始闪烁和滚动
我的程序是一个计算器,目前只做加法和减法,但当我输入一个大的数字,它开始闪烁和滚动。它适用于小数字。节目不长,就在这里。关于这个问题的youtube视频C++ 当我输入一个大数字时,为什么我的计算器程序开始闪烁和滚动,c++,C++,我的程序是一个计算器,目前只做加法和减法,但当我输入一个大的数字,它开始闪烁和滚动。它适用于小数字。节目不长,就在这里。关于这个问题的youtube视频 #包括 int GVFU() { std::cout a; 返回a; } int add() { int x=GVFU(); int y=GVFU(); intz=x+y; std::cout如果尝试从cin读取值,而读取的值与预期格式不匹配,则会导致流失败,并且所有未来的读取操作将立即返回,而不读取任何内容 独立地,int类型的C++整数值有
#包括
int GVFU()
{
std::cout a;
返回a;
}
int add()
{
int x=GVFU();
int y=GVFU();
intz=x+y;
std::cout如果尝试从cin读取值,而读取的值与预期格式不匹配,则会导致流失败,并且所有未来的读取操作将立即返回,而不读取任何内容
独立地,int类型的C++整数值有一个最小和最大可能值,这取决于您使用的编译器和系统。如果在输入一个数时超过该值,CIN将认为它是一个失败的读。
综上所述,一旦您输入了一个太大的值,程序将继续在程序的主循环中运行,提示输入一个值,立即返回而不实际获得用户输入,然后计算垃圾值
要解决此问题,您需要(1)只希望用户不会输入任何意外的内容,或者(2)更可靠地获取用户输入。关于如何在堆栈溢出问题上执行选项(2),这里有很多很好的解释,现在您知道问题的根本原因是什么,希望您能够修复代码并使其正常工作!使用
std::cout << std::numeric_limits<int>::max() << std::endl;
std::cout您将输入作为“int”,int的值范围在-2147483648到2147483647之间。
这意味着,如果超过该值2147483647,则不能将其存储为整数(int)类型。
对于这样大的数字,您可能应该使用长数据类型。如果用户输入的数据超过整数限制,您可以在代码中添加以下检查
int GVFU()
{
std::cout <<"enter number";
int a;
std::cin >> a;
if(cin.fail())
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Invalid input " << endl;
}
return a;
}
你的输入读取函数失败,你没有检查任何地方是否有错误。你可能接受了一个字符而不是整数,从而进入了一个无休止的循环。关于这个主题的更多信息。但是如果用户输入了一个非常大的数字,unsigned long不会还会遇到同样的问题吗?当然,同样的事情也会发生,如果他需要插入更大的数字,我只是想给他一些建议:-)对否决票的解释更受欢迎..将有助于确定答案
int GVFU()
{
std::cout <<"enter number";
int a;
std::cin >> a;
if(cin.fail())
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Invalid input " << endl;
}
return a;
}
#include <iostream>
#include <cstdlib>
using namespace std;
int GVFU()
{
std::cout <<"enter number";
int a;
std::cin >> a;
if(cin.fail())
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Invalid input " << endl;
std::exit(EXIT_FAILURE);
}
return a;
}
enter 1 for addition and 2 for subtraction1
enter number4535245242
Invalid input
Program ended with exit code: 1