C++ 如何使用C++;

C++ 如何使用C++;,c++,C++,好的,我已经有一段时间没有读写文件了,我几乎忘记了我学到的一切。所以,我目前只是想弄清楚如何从文本文件中读取特定的行,并将该行输出到命令提示符中。以下是我遇到问题的代码: #include <iostream> #include <fstream> using namespace std; int main(){ ifstream input; int lineN=0; string line[lineN]; input.open("input.txt"); getl

好的,我已经有一段时间没有读写文件了,我几乎忘记了我学到的一切。所以,我目前只是想弄清楚如何从文本文件中读取特定的行,并将该行输出到命令提示符中。以下是我遇到问题的代码:

#include <iostream>
#include <fstream>
using namespace std;

int main(){
ifstream input;
int lineN=0;
string line[lineN];
input.open("input.txt");

getline(input, line[lineN]);
cout << line[lineN];
}
#包括
#包括
使用名称空间std;
int main(){
ifstream输入;
int=0;
绳线[亚麻布];
input.open(“input.txt”);
getline(输入,行[line]);

您是否可以分配一个大小为0的数组

您可以在这里找到将要发生的事情的答案:
您分配一个大小为0的数组

您可以在这里找到将要发生的事情的答案:

问题在于您在此处定义了一个空字符串数组,而数组不是动态的:

int lineN=0;
string line[lineN];
当您将
lineN
更改为1时,数组中没有任何更改,您将越界

更好的方法是使用:

并将其添加到向量中:

line.push_back(current_line); 
将所有这些放在一个好的循环中会更有用:

 string current_line; 
 while (getline(input, current_line)) {
        line.push_back(current_line); 
 }
您可以在以后访问任何一行,方法是使用数组中的
line[i]
,只要
i
 for (string x : line)  {    // means for every x in line[]
     cout<< x<<endl; 
 }  
for(string x:line){//表示第[]行中的每个x

cout问题是您在这里定义了一个空字符串数组,而数组不是动态的:

int lineN=0;
string line[lineN];
当您将
lineN
更改为1时,数组中没有任何更改,您将越界

更好的方法是使用:

并将其添加到向量中:

line.push_back(current_line); 
将所有这些放在一个好的循环中会更有用:

 string current_line; 
 while (getline(input, current_line)) {
        line.push_back(current_line); 
 }
您可以在以后访问任何一行,方法是使用数组中的
line[i]
,只要
i
 for (string x : line)  {    // means for every x in line[]
     cout<< x<<endl; 
 }  
for(string x:line){//表示第[]行中的每个x

coutstring行[5]将定义一个大小为5的数组,其中包含可访问的索引[0]-[4],注意[5]不是有效的索引。如果lineN=1,则程序不会崩溃纯粹是“运气”。无论如何,这只是告诉getline将读取的内容存储在何处,而不是从何处读取。您将始终以这种方式读取文本文件的第一行。getline永远不会获得值“lineN”如果不是再次尝试学习作用域和函数调用的基础知识,那么对您来说应该是绝对明显和不言而喻的。
getline(input,line[lineN]);
-您正在访问数组边界之外的元素,从而导致未定义的行为。这甚至不应该编译:
std::string line[lineN]在C++中,C++是不合法的。你在C++中编译,不是吗?(我知道所有编译器都需要在C++中编译特殊选项,而不是从C++派生的一些自定义语言。)String Lo[ 5 ]将定义一个大小为5的数组,其中可访问索引[0 ] -[4 ],注[5 ]。不是有效的索引。如果你的程序没有因为lineN=1而崩溃,这纯粹是“运气”。无论如何,这只是告诉getline将读取的内容存储在何处,而不是从何处读取。你将始终以这种方式读取文本文件的第一行。getline永远不会获得值“lineN”如果不是再次尝试学习作用域和函数调用的基础知识,那么对您来说应该是绝对明显和不言而喻的。
getline(input,line[lineN]);
-您正在访问数组边界之外的元素,从而导致未定义的行为。这甚至不应该编译:
std::string line[lineN]在C++中是不合法的。你在C++中编译,不是吗?(我知道所有编译器都需要在C++中编译特殊选项,而不是从C++派生的一些自定义语言。)