C ++ Calculator错误检查和效率

时间:2014-02-06 18:28:45

标签: c++ calculator

目前正在攻读大学水平的c ++课程。我们的第一个项目是编写一个基本的C ++计算器,要求用户输入2个实数,然后输入要执行的操作。

首先,我对如何错误检查输入感到困惑。确保用户输入数字而不是字符。同样,检查以确保用户选择了有效的操作(+ - * /)。

其次,我们需要使用指针来更好地掌握如何使用它们。因此,为什么我分配了新的内存来存储值。

非常感谢知道我做错了什么,以及我能做得更好。感谢。

 #include <iostream>
 using namespace std;

float calc(float &a, float &b, char &c) {
    float result;

    if (c == '+')
        result = a + b;
    if (c == '-')
        result = a - b;
    if (c == '*')
        result = a * b;
    if (c == '/')
        result = a / b;

    return result;
}


int main(int argc, const char * argv[])
{
    while (true) {
    float *nptr1 = new(nothrow) float;
    float *nptr2 = new(nothrow) float;
    char *operandptr = new(nothrow) char;

    cout<<"Enter first real number: ";
      cin >> *nptr1;
    cout<<"Enter second real number: ";
      cin >> *nptr2;
    cout<<"Operation: ";
      cin >> *operandptr;


    cout << "The result: " <<   calc(*nptr1, *nptr2, *operandptr) << endl;

    }
return 0;
}

2 个答案:

答案 0 :(得分:1)

“其次,我们需要使用指针来更好地掌握如何使用它们。因此,为什么我分配了新的内存来存储值。”

希望他也教会你如何解除分配记忆,你就忘记了。您目前通过分配而不是取消分配来泄漏内存。对于每个“新”操作,您需要一个相应的“删除”操作。现在你可以把它放在循环的末尾。

delete nptr1;
delete nptr2;
delete operandptr;
}

请参阅http://www.cplusplus.com/reference/new/operator%20delete/

答案 1 :(得分:0)

这里因为你传递一个指向函数的指针,所以不需要提供&amp;在函数定义的参数中,改为提供*并使用相同的函数,如下所示进行更改

还给出循环的结束条件,否则它将继续循环。在使用结束时释放内存。

#include <iostream>
 using namespace std;

float calc(float *a, float *b, char *c) {
    float result;

    if (*c == '+')
        result = *a + *b;
    if (*c == '-')
        result = *a - *b;
    if (*c == '*')
        result = *a * *b;
    if (*c == '/')
        result = *a / *b;

    return result;
}


int main(int argc, const char * argv[])
{

    float *nptr1 = new(nothrow) float;
    float *nptr2 = new(nothrow) float;
    char *operandptr = new(nothrow) char;

    cout<<"Enter first real number: ";
      cin >> *nptr1;
    cout<<"Enter second real number: ";
      cin >> *nptr2;
    cout<<"Operation: ";
      cin >> *operandptr;


    cout << "The result: " <<   calc(nptr1, nptr2, operandptr) << endl;

    delete nptr1;
    delete nptr2;
    delete operandptr;

return 0;
}