我是程序员和计算器的新手,他使用该程序来计算另一组数字,并在对输入控件进行循环之后,我决定进行内存管理,因为先前的输入只是与新输入保持堆栈输入号码。
我确实尝试应用一些指针和内存管理,但这只是使第一个for循环无限循环。但是,如果我删除了指针,它将使程序正常运行,但是先前计算出的值将被添加到新计算出的值中。
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
//variables
float a[1000],c;
char d,e;
int f = 1,g;
//pointers
float *b;
do{
system("CLS");
cout << endl;
cout << " Welcome!!!" << endl;
cout << endl;
cout << " This is a calculator (obviously)" << endl;
cout << endl;
cout << " Please input how many entities to be calculated: ";
cin >> g;
cout << endl;
cout << endl;
for(int h = 0;h < g; h++){
cout << " Input numbers: ";
cin >> a[1000];
}
cout << endl;
cout << " Choose the LETTER corresponding to the operation below" << endl << endl;
cout << " A - Addition" << endl;
cout << " S - subtraction" << endl;
cout << " M - Multiplication" << endl;
cout << " D - Divison" << endl << endl;
cout << " Choose operation to be used: ";
cin >> d;
d = toupper(d);
if((d != 'A') && (d != 'S') && (d != 'M') && (d != 'D')){
do {
cout << " Choose operation from [A - S - M - D] respectively: ";
cin >> d;
d = toupper(d);
}while((d != 'A') && (d != 'S') && (d != 'M') && (d != 'D'));
}
switch (d){
case 'A':
for(int h = 0;h < g; h++){
c +=a[1000];
}
cout << " sum is " << c << endl;
break;
case 'S':
for(int h = 0;h < g; h++){
c -=a[1000];
}
cout << " difference is " << c << endl;
break;
case 'M':
for(int h = 0;h < g; h++){
c *=a[1000];
}
cout << " product is " << c << endl;
break;
case 'D':
for(int h = 0;h < g; h++){
c /=a[1000];
}
cout << " quotient is " << c << endl;
break;
}
do{
cout << endl;
cout << " Would you like to calculate again? [Y/N] ";
cin >> e;
e = toupper(e);
}while ((e !='N') && (e != 'Y'));
if (e == 'Y'){
// Announce pointer and deletion of values ; also to clear memory on new start.
//
}
else{
f = 0;
}
}while (f == 1);
return 0;
}
答案 0 :(得分:2)
我真的不明白您指的是什么指针或内存管理。但是,
cin >> a[1000];
是错误的。包含1000
个元素的数组的最后一个有效索引为999
。您正在访问超出范围的数组,这会调用未定义的行为。可能发生任何事情(不是真的,但最好是这样考虑)。
正确的循环应该是(“最小更改以避免ub”中的“正确”):
for(int h = 0;h < g; h++){
cout << " Input number: ";
cin >> a[h];
}
但是,如果用户为1000
输入的数字大于g
,这也会引起麻烦。您真正应该使用的是std::vector
,它使您可以按需要输入任意数量的元素,而不必在编译时指定其大小。
PS:如果您的代码没有指针或没有手动内存管理就可以了,那么没有理由添加它。指针和(手动)内存管理很复杂,要学会处理它主要是学习如何避免它。