目前正在攻读大学水平的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;
}
答案 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;
}