限制C++中的字符输入

Restricting character input in C++

本文关键字:字符输入 C++ 限制      更新时间:2023-10-16

我真的很好奇如何在计算器这样的程序中限制字符输入,有人能教我怎么做吗?我真的对此很陌生。如果有人回答,请你解释一下答案中的每一行代码。提前感谢。:)

#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;

}

查看您正在使用的函数的文档。

简化代码:

double v1;
std::cin >> v1;

这是在尝试从std::cin中提取double,跳过前导空格。

如果提取失败——例如,因为某人输入的内容不是double值的表示——则会写入一个零(由于C++11,以前该值保持不变),并且流上的故障位设置

这可以检查并清除:

if ( std::cin.fail() )
{
    // handle error
    std::cin.clear();
}

实际上,clear()上的页面有一个功能齐全的示例,可以读取数字、检查故障并重复输入。

话虽如此,但我支持@Maikel的评论。如果你想把它超越实验阶段,你会想写一个真正的语法解析器,BoostSpirit是一个很好的选择。