C++ 程序工作,但当输入无效时,它会继续循环c++; #包括“stdafx.h” #包括 #包括 使用名称空间std; 内联双应用程序(双num1,双num2); 内联双除法(双num1,双num2); 内联双加法(双num1,双num2); 内联双减法(双num1,双num2); int main() { cout>输入运算符>>num2; 开关(输入操作员) { 大小写('*'): 结果=多次应用(num1,num2); 打破 格(“/”): 结果=除法(num1,num2); 打破 大小写(“+”): 结果=相加(num1,num2); 打破 格('-'): 结果=减法(num1,num2); 打破 违约: 抛出运行时_错误(“无效运算符”); } } 捕获(运行时错误) { cout
C++ 程序工作,但当输入无效时,它会继续循环c++; #包括“stdafx.h” #包括 #包括 使用名称空间std; 内联双应用程序(双num1,双num2); 内联双除法(双num1,双num2); 内联双加法(双num1,双num2); 内联双减法(双num1,双num2); int main() { cout>输入运算符>>num2; 开关(输入操作员) { 大小写('*'): 结果=多次应用(num1,num2); 打破 格(“/”): 结果=除法(num1,num2); 打破 大小写(“+”): 结果=相加(num1,num2); 打破 格('-'): 结果=减法(num1,num2); 打破 违约: 抛出运行时_错误(“无效运算符”); } } 捕获(运行时错误) { cout,c++,C++,if(cin.fail()) { cin.clear(); cin.ignore(数值限制::max(),'\n'); } 要清除无效的输入和缓冲区,请在cplusplus.com/forum/初学者/2957/上找到信息提示:检查cin.fail()将代码添加到问题中我不明白为什么您需要向我们展示一个完整的程序。为什么不编写一个简单的main函数,3或4行,演示无效输入的问题,然后发布它呢?@Tibo我把它放在cin>>num1>>InputOperator>>num2之后;它输出cin.f
if(cin.fail())
{
cin.clear();
cin.ignore(数值限制::max(),'\n');
}
要清除无效的输入和缓冲区,请在cplusplus.com/forum/初学者/2957/上找到信息提示:检查
cin.fail()
将代码添加到问题中我不明白为什么您需要向我们展示一个完整的程序。为什么不编写一个简单的main
函数,3或4行,演示无效输入的问题,然后发布它呢?@Tibo我把它放在cin>>num1>>InputOperator>>num2之后;它输出cin.fail()当它进入循环时,它输出1,但当我很好时,它输出0,我也会执行类似于cin.clear()的操作。请注意,那些inline
标记没有效果,因为这些函数的定义在调用它们的点上不可见。
#include "stdafx.h"
#include <iostream>
#include <stdexcept>
using namespace std;
inline double multplication(double num1, double num2);
inline double division(double num1, double num2);
inline double addition(double num1, double num2);
inline double substraction(double num1, double num2);
int main()
{
cout << "Welcome to 'The calculator' just enter a number the operator '*, /, + and -' then the second number enjoy" << endl;
char redo = 'r'; double result = 0; int cnt = 0;
while (redo == 'r' || redo == 'R')
{
try
{
if (cnt > 0)
cout << "Ok same rules as before" << endl;
int num1 = 0, num2 = 0; char inputedOperator = '*';
cin >> num1 >> inputedOperator >> num2;
switch (inputedOperator)
{
case('*') :
result = multplication(num1, num2);
break;
case('/') :
result = division(num1, num2);
break;
case('+') :
result = addition(num1, num2);
break;
case('-') :
result = substraction(num1, num2);
break;
default:
throw runtime_error("Invalid operator");
}
}
catch (runtime_error err)
{
cout << err.what() << endl;
cout << "Enter y to redo or anykey to exit" << endl;
cin >> redo;
++cnt;
continue;
}
cout << "The answer is " << result << "\nPlease enter y to redo or anykey to exit" << endl;
cin >> redo;
++cnt;
}
cout << "Thanks for using" << endl;
return 0;
}
inline double multplication(double num1, double num2)
{
return num1 * num2;
}
inline double division(double num1, double num2)
{
return num1 / num2;
}
inline double addition(double num1, double num2)
{
return num1 + num2;
}
inline double substraction(double num1, double num2)
{
return num1 - num2;
}
if (cin.fail())
{
cin.clear();
cin.ignore(numeric_limits<int>::max(), '\n');
}