我将如何处理在C 中放入计算器中的字母

How Would I handle letters being put in my Calculator in C++

本文关键字:计算器 何处理 处理      更新时间:2023-10-16

嘿,大家好很久没有编程了,所以我不太好,现在我刚刚陷入错误处理,例外和类似的事情,只是开始学习C ,这是一个我学到的几乎没有什么不同,所以想知道我是否可以在这里得到一些帮助。

我开始制作一个计算器,它进行得很好,但是如果我输入字母而不是数字,我会遇到问题这样的事情..我已经提前知道我的代码可能很混乱,因此接受批评不会伤害我的感受。但是无论如何,这里到目前为止

int main()
{
    double num1;
    double num2;
    char operation;
    char again;
    cout << "Welcome to Brent's Calculator.n";
    cout << "Enter 'Value (operator) Value' ex. 2 + 2" << endl;
    cin >> num1 >> operation >> num2;
        cout << num1 << " "
            << operation << " "
            << num2 << " = ";
        do {
            switch (operation) {
            case '+':
                cout << num1 + num2 << endl;
                break;
            case '-':
                cout << num1 - num2 << endl;
                break;
            case '*':
            case 'x':
            case 'X':
                cout << num1 * num2 << endl;
                break;
            case '/':
            case '%':
                if (num2 == 0) {
                    cout << "You cant divide by 0" << endl;
                }
                else {
                    cout << num1 / num2 << endl;
                }
                break;
            default:
                cout << "not understood";
            }
            cout << "would you like to enter another calculation? (y/n) ";
            cin >> again;
            cin >> num1 >> operation >> num2;
            if (cin.fail()) {
                cout << "you need to enter numbers" << endl; //this part added mess with it tomorrow
                cin.clear();
                cin.ignore(999, '/n');
            }
            cout << num1 << " "
                << operation << " "
                << num2 << " = ";

        } while (again == 'y' || again == 'Y');
     //closing bracket of the else for cin.fail
    cin.get();
    return 0;
}

当然,如果我在cin.fail的语句中不起作用

您的cin.fail因小型错字而无法工作

多字符字符常数

cin.ignore(999, '/n');

应该是

    cin.ignore(999, 'n');

更正的代码

好的,尝试了另一种解决方案

所以这个想法是使用 continue ..并丢弃无效值的num1和num2的值(仅用于' ')。我已经使用了null,但是您可以使用任何其他想要的乱价值

#include<iostream>
#include <math.h>       /* isnan, sqrt */    
using namespace std;
int main()
{
    double num1;
    double num2;
    char operation;
    char again;
    cout << "Welcome to Brent's Calculator.n";
    cout << "Enter 'Value (operator) Value' ex. 2 + 2" << endl;
    cin >> num1 >> operation >> num2;
    cout << num1 << " "
    << operation << " "
    << num2 << " = ";
    do {
        switch (operation) {
            case '+':
                if ((num1 != NULL) && (num2 != NULL ))
                cout << num1+ num2 << endl;
                break;
            case '-':
                cout << num1 - num2 << endl;
                break;
            case '*':
            case 'x':
            case 'X':
                cout << num1 * num2 << endl;
                break;
            case '/':
            case '%':
                if (num2 == 0) {
                    cout << "You cant divide by 0" << endl;
                }
                else {
                    cout << num1 / num2 << endl;
                }
                break;
            default:
                cout << "not understood";
        }
        cout << "would you like to enter another calculation? (y/n) ";
        cin >> again;
        cin >> num1 >> operation >> num2;
        if (cin.fail()) {
            cout << "you need to enter numbers" << endl; //this part added mess with it tomorrow
            cin.clear();
            cin.ignore(999, 'n');
            num1 = NULL;
            num2 = NULL;
            continue;
        }
        cout << num1 << " "
        << operation << " "
        << num2 << " = ";

    } while (again == 'y' || again == 'Y');
    //closing bracket of the else for cin.fail
    cin.get();
    return 0;
}

更改后输出

Welcome to Brent's Calculator.
Enter 'Value (operator) Value' ex. 2 + 2
44+44
44 + 44 = 88
would you like to enter another calculation? (y/n) y
a+b
you need to enter numbers
would you like to enter another calculation? (y/n) y
4+4.4
4 + 4.4 = 8.4
would you like to enter another calculation? (y/n) 

注意:转角案例是当两个输入号码为num1 = 0和num2 = 0时0 0 = 0(在这种情况下最好使用其他标志)