【发布时间】:2020-05-22 22:16:11
【问题描述】:
我需要将文本文件读入一个数组。文本文件被格式化,因此第一行包含数组大小,以下几行是数组的元素:
6
5
3
2
1
6
4
其中数组大小等于6。文件需要以这种格式读取:
a.exe < testfiles/input
这是我目前所拥有的:
int main(){
int arraySize = 0;
cin >> arraySize;
int array[arraySize];
for(i = 1; i < arraySize; i++){
cin >> array[i];
}
for(j = 0; j < arraySize-1; j++){
//insertion sort here
}
}
数组保持全零,但大小正确。谁能看到我的错误?
编辑:我已经修复了要动态分配的数组。程序现在执行没有错误,但现在整个数组都充满了文本文件的第二个条目,在本例中为 5。
【问题讨论】:
-
数组的大小必须是编译时已知的常量表达式。如果您只知道运行时的大小,请改用
vector<int>。 -
使用
std::vector<int>,因为直到运行时您才知道大小。 -
解决此问题所缺少的知识是堆栈与堆内存分配。你不能在堆栈上做动态大小的数组。当您像您所做的那样声明一个数组时,这就是基于堆栈的分配。您只能使用
new关键字在堆上声明动态大小的数组。见:stackoverflow.com/a/1598409/2516916 -
这是无效的 C++ 代码。数组大小必须是一个整数 const 表达式。使用动态数组或使用 std::vector。
-
int array[arraySize];不是有效的标准 C++。 VLA 是编译器扩展,不是语言功能。使用std::vector。