我真的很好奇,因为如何限制像计算器这样的程序中的字符输入,任何人都可以教我如何做,我对此真的很陌生。如果有人回答你,请解释你答案中的每一行代码。提前致谢。 :)
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int choice;
double add, sub, mul, div, rem, square, power, v1, v2;
long double sine, cosine, tangent;
do{
cout << "Choose an operation." << endl << "\n";
cout << "[1] Addition." << endl;
cout << "[2] Subtraction." << endl;
cout << "[3] Multiplication." << endl;
cout << "[4] Division." << endl;
cout << "[5] Exit." << endl;
cin >> choice;
while (choice < 1 || choice > 5){
cout << "Please Choose from 1 to 5" << endl;
cin >> choice;
}
if (choice == 1){
cout << "Please Enter 1st value: ";
cin >> v1;
cout << "Please Enter 2nd value: ";
cin >> v2;
add = v1 + v2;
cout << "The answer is: " << fixed << setprecision(2) << add << endl << endl;
}
else if (choice == 2){
cout << "Please Enter 1st value: ";
cin >> v1;
cout << "Please Enter 2nd value: ";
cin >> v2;
sub = v1 - v2;
cout << "The answer is: " << fixed << setprecision(2) << sub << endl << endl;
}
if (choice == 3){
cout << "Please Enter 1st value: ";
cin >> v1;
cout << "Please Enter 2nd value: ";
cin >> v2;
mul = v1 * v2;
cout << "The answer is: " << fixed << setprecision(2) << mul << endl << endl;
}
if (choice == 4){
cout << "Please Enter 1st value: ";
cin >> v1;
cout << "Please Enter 2nd value: ";
cin >> v2;
div = v1 / v2;
rem = fmod (v1,v2);
cout << "The answer is: " << fixed << setprecision(2) << div << " remainder " << rem << endl << endl;
}
if (choice == 5)
break;
}
while (choice != 5);
{
cout << endl << "Goodbye.";
}
return 0;
}
答案 0 :(得分:1)
检查您正在使用的功能the documentation。
简化代码:
double v1;
std::cin >> v1;
这是试图从double
中提取std::cin
,跳过前导空格。
如果提取失败 - 例如因为某人输入了不代表double
值的东西 - 写了零(因为C ++ 11,之前的值保持不变),和failbit在流上设置。
可以检查并清除:
if ( std::cin.fail() )
{
// handle error
std::cin.clear();
}
实际上clear()上的页面有一个功能齐全的例子,可以读取数字,检查失败并重复输入。
话虽如此,我还是第二次@ Maikel的评论。如果你想超越实验阶段,你需要编写一个真正的语法分析器,Boost.Spirit是一个很好的选择。