for循环使用getline在向量中输入字符串

时间:2014-04-09 20:55:08

标签: c++ string vector

所以我有一份学校作业,我需要声明一个字符串向量 然后使用for循环使用get行将名称输入到向量中。这个代码是我到目前为止所做的,我试图在我的向量中为一个位置创建一个变量,然后根据我的变量的值将一个字符串输入到向量中。我正在使用C ++。

我想知道的是:我的逻辑中存在哪些缺陷?

#include "stdafx.h"
#include <iostream>;
#include <vector>;
#include <string>;
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
vector<string> name_list(10);
int n;
for (name_list[n]; cin.getline >> name_list[n]; ++n)
    cin >> name_list[n];
cout << name_list[n];
int stop; cin >> stop;
return 0;
}

EDIT ::: 所以我明白了!谢谢你0x499602D2,你有点让我正确的方式。我想出的代码就是这个::

int _tmain(int argc, _TCHAR* argv[])
{
vector<string> name_list(11);
int n = 0;
for (int n = 0; n < 11; ++n);
getline(cin, name_list[n]);
cout << name_list[n];

int stop; cin >> stop;
return 0;
}

2 个答案:

答案 0 :(得分:0)

n不仅没有初始化,而且你也在做cin.getline >> name_list[n],据我所知,它甚至不应该编译。 getlinestd::cin的成员函数,它从输入读取一行到字符数组。这里不需要它,因为我们正试图读入一个向量。

此外,由于您希望将用户输入的名称从向量中的每个插槽中获取,因此尝试使用getline检索也是没有意义的。< / p> 需要将

n初始化为一个整数,当使用name_list[n]进行访问时,将为我们提供向量的开头(即0),而不是{{1我们使用运算符getline来获取每个空格分隔的输入。像这样:

>>

for循环体中不需要声明,因为它已在循环参数中完成。


您需要注意的另一件事是超越矢量的大小。您已初始化for (int n = 0; std::cin >> name_list[n]; ++n) ; // empty ,其大小为name_list,如果用户输入10个名称,则使用11访问索引将导致Undefined Behavior你的程序,这是一种说你的程序无效的特殊方式。

使用name_list[n]成员函数会更好,因为如果您尝试访问越界地址,它将抛出exception

at()

答案 1 :(得分:0)

你需要初始化n = 0,在第二个for参数中你可能想把cin移动到循环中并用i&lt; 10因为否则循环不知道何时停止