所以我有一份学校作业,我需要声明一个字符串向量 然后使用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;
}
答案 0 :(得分:0)
n
不仅没有初始化,而且你也在做cin.getline >> name_list[n]
,据我所知,它甚至不应该编译。 getline
是std::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因为否则循环不知道何时停止