C++ 如何将文本文件的特定行读入C++;?

C++ 如何将文本文件的特定行读入C++;?,c++,c++11,C++,C++11,我需要将文本文件读入数组。对文本文件进行格式化,使第一行包含数组大小,以下行是数组的元素: 6 5 3 2 1 6 4 其中数组大小等于6。需要以以下格式读取文件: a.exe < testfiles/input a.exe>排列; int数组[arraySize]; 对于(i=1;i>阵列[i]; } 对于(j=0;j在C++数组声明中,数组大小必须是。最简单的更改是使用动态数组: int main(){ using n

我需要将文本文件读入数组。对文本文件进行格式化,使第一行包含数组大小,以下行是数组的元素:

    6
    5
    3
    2
    1
    6
    4
其中数组大小等于6。需要以以下格式读取文件:

a.exe < testfiles/input
a.exe
以下是我目前掌握的情况:

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
    }

}
intmain(){
int-arraySize=0;
cin>>排列;
int数组[arraySize];
对于(i=1;i>阵列[i];
}
对于(j=0;j
数组保持为全零,但大小正确。有人能看出我的错误吗


编辑:我已经修复了要动态分配的数组。现在程序执行没有错误,但是现在整个数组都是文本文件的第二个条目,在这种情况下,5。

< P>在C++数组声明中,数组大小必须是。最简单的更改是使用动态数组:

int main(){
    using namespace std;
    int arraySize = 0;

    cin >> arraySize;
    int * array = new int[arraySize];

    for(int i = 1; i < arraySize; i++){
        cin >> array[i];
    }

    for(int j = 0; j < arraySize-1; j++){
        //insertion sort here
    }
    delete [] array;
}
intmain(){
使用名称空间std;
int-arraySize=0;
cin>>排列;
int*array=newint[arraySize];
for(int i=1;i>阵列[i];
}
对于(int j=0;j > p>在C++数组声明中,数组大小必须是最简单的更改是使用动态数组:

int main(){
    using namespace std;
    int arraySize = 0;

    cin >> arraySize;
    int * array = new int[arraySize];

    for(int i = 1; i < arraySize; i++){
        cin >> array[i];
    }

    for(int j = 0; j < arraySize-1; j++){
        //insertion sort here
    }
    delete [] array;
}
intmain(){
使用名称空间std;
int-arraySize=0;
cin>>排列;
int*array=newint[arraySize];
for(int i=1;i>阵列[i];
}
对于(int j=0;j
因为这个问题读起来像是家庭作业,我猜你不允许使用
std
。然而,如果你不太可能成功,这里有一个更安全的方法来完成你的尝试:

#include <iostream>
#include <vector>

using namespace std;

int main(){
    vector<int> nums;

    int arraySize;
    cin >> arraySize;

    for(int i = 0; i < arraySize; i++){
        int value;
        cin >> value;
        nums.push_back(value);
    }

    for (auto num : nums)
        cout << num << " ";

    return 0;
}
#包括
#包括
使用名称空间std;
int main(){
向量nums;
内部阵列化;
cin>>排列;
for(int i=0;i>值;
nums.推回(值);
}
用于(自动编号:nums)

cout因为这个问题读起来像是家庭作业,我猜你不允许使用
std
。但是,如果你有机会,这里有一个更安全的方法来完成你的尝试:

#include <iostream>
#include <vector>

using namespace std;

int main(){
    vector<int> nums;

    int arraySize;
    cin >> arraySize;

    for(int i = 0; i < arraySize; i++){
        int value;
        cin >> value;
        nums.push_back(value);
    }

    for (auto num : nums)
        cout << num << " ";

    return 0;
}
#包括
#包括
使用名称空间std;
int main(){
向量nums;
内部阵列化;
cin>>排列;
for(int i=0;i>值;
nums.推回(值);
}
用于(自动编号:nums)


cout数组的大小必须是编译时已知的常量表达式a.k.a。如果您只知道运行时的大小,请使用
vector
。使用
std::vector
,因为您直到运行时才知道大小。解决此问题所缺少的知识是堆栈与堆内存分配。您无法进行动态分配-当您声明一个数组,就像您已经完成的那样,这是基于堆栈的分配。您只能使用“代码>新的< /Cord>关键字声明堆上的动态大小数组。参见:这是无效的C++代码。数组大小必须是一个完整的const表达式。使用动态数组或使用STD::vector。<代码> int数组[数组大小]C++是一个编译器扩展,而不是语言特征。使用<代码> STD::vector < /Calp>。数组的大小必须是编译时已知的常数表达式.k.>代码<矢量>代码>如果您只知道运行时的大小。使用<代码> STD::vector < /代码>,因为您直到运行时才知道大小。解决这个问题的一个知识是堆栈与堆内存分配。在堆栈上不能做动态大小的数组。当你声明一个数组,就像你已经完成的那样,那就是基于堆栈的分配。你只能用“C++代码>新的< /Cord>关键字”声明堆上的动态大小数组。e必须是整型常量表达式。请使用动态数组或std::vector。
int数组[arraySize]C++是一个编译器扩展,而不是一个语言特征。使用一个<代码> STD::向量<代码>……<代码> i <代码>开始于<代码> 1代码> >代码< 0代码> >为什么不只是代码> STD::向量< /代码>?@ JePiJuHL,使用<代码>向量< /代码>也是一个很好的解决方案。我的答案是:评估OP的代码是如何不正确的。虽然…
i
1
开始不是
0
为什么不只是
std::vector
?@JesperJuhl,使用
vector
也是一个很好的解决方案。我的回答说明了OP的代码是如何不正确的。使用vector而不是数组?对于数组,你需要提前知道大小。对于向量,你不知道。使用向量相对于数组有什么好处?对于数组,你需要提前知道大小。对于向量,你不知道。