用户输入的C++数组大小
C++ array size by user input
我正在尝试编写一个程序,该程序将具有数组的用户输入大小,然后将值带入该数组。我最初尝试了
int sz = 51;
double Arr[sz];
这导致了编译错误。显然,变量的动态分配必须发生,如果可能的话,我宁愿避免这种情况。所以我修改了我的代码(当前状态如下所示),它现在只抛出"在']'标记之前的预期主表达式"。有没有办法解决这个问题,我只是没有看到,或者我需要使用动态分配?
谢谢你抽出时间!
#include <iostream>
#include <iomanip> //for setprecision
using namespace std;
int sz = 51;
double n=0;
double Arr[0];
void get_input(double Arr[], int &sz){ //gets input
do{
cout<< "Enter size: "<< endl;
cin>> sz;
if (sz<0 || sz>50){
cout<< "Invalid size, enter a value between 0 and 50"<<endl;
}
}while(sz<0 || sz>50);
for( int i=0; i<sz; i++){
cin>> Arr[i];
}
}
double calcSum( double Arr[], int sz){ //finds sum
for(int i=0; i<sz; i++){
n+= Arr[i];
}
return(n);
}
void printArray(double Arr[], int sz){ //prints array elements
for(int i=0; i<sz; i++){
cout<< Arr[i]<< setprecision(2)<<" ";
if(i%7 == 0)
cout<< endl;
}
}
int main()
{
double Arr[sz];
get_input(Arr[], sz); //error here
printArray(Arr[], sz); //error here
return 0;
}
VLA(例如Arr[sz]
)仅作为C++中的扩展受支持。它们不是官方语言标准的一部分。您应该使用std::vector
。
只需使用std::vector
,C++中就有一个标准库。
演示:
- 注意:您不需要全局变量(它们被局部变量遮蔽,您可以通过引用传递它们)
在Coliru上直播
#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;
using array_t = std::vector<double>;
void get_input(array_t& Arr) { // gets input
size_t sz = 51; // unsigned types cannot be negative
do {
cout << "Enter size: " << endl;
cin >> sz;
if (sz > 50) {
cout << "Invalid size, enter a value between 0 and 50" << endl;
}
} while (sz > 50);
for (size_t i = 0; i < sz; ++i) {
double v;
if (cin >> v)
Arr.push_back(v);
else
std::cerr << "Error reading inputn";
}
//assert(sz = Arr.size());
}
double calcSum(array_t const& Arr) { // finds sum
double n = 0;
for (size_t i = 0; i < Arr.size(); ++i) {
n += Arr[i];
}
return n;
}
void printArray(array_t const& Arr) { // prints array elements
for (size_t i = 0; i < Arr.size(); ++i) {
cout << Arr[i] << setprecision(2) << " ";
if (i % 7 == 6)
cout << endl;
}
}
int main() {
array_t Arr;
get_input(Arr);
printArray(Arr);
std::cout << "nSum: " << calcSum(Arr) << "n";
}
当输入3 1 2 3
时,您会得到:
Enter size: 3
1 2 3
1 2 3
Sum: 6
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '