输入没有通过Vector输入

时间:2014-04-09 22:32:17

标签: c++ string vector

好的,所以我试图将输入读入矢量,然后以相反的顺序打印出来。 我有一个非常好的想法如何做到(我认为),但我的问题是我的代码只读取向量的第一个插槽中的用户输入。 。 。我需要它从输入中读取10个单独的字符串到我的向量中的10个不同的插槽。 。 。这是我到目前为止所得到的:

#include <iostream>;
#include <vector>;
#include <string>;

using namespace std;

int main()
{
    vector<string> name_list(11);
    int n = 0;
    for (int n = 0; n < 11; ++n);
    getline(cin, name_list[n]);
    cout << name_list[0];

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

3 个答案:

答案 0 :(得分:1)

循环语句后面有分号

for (int n = 0; n < 11; ++n);

所以循环什么都不做

此外,您还在谈论需要阅读的10个要素。

代码可能看起来如下:

const size_t N = 10;
vector<string> name_list( N );

for ( int n = 0; n < N; ++n )
{
    getline( cin, name_list[n] );
}

for ( vector<string>::size_type n = name_list.size(); n != 0; )
{
     cout << name_list[--n] << endl;
}

同样可以使用标准算法编写。例如

const size_t N = 10;
vector<string> name_list;

name_list.reserve( N );

copy_n( istream_iterator<string>( cin ), N, back_inserter( name_list ) );

reverse_copy( name_list.begin(), name_list.end(), ostream_iterator<string>( cout, "\n" ) );

答案 1 :(得分:0)

不确定您要问的是什么,但我会向前迈进一步,并假设您的代码出现问题并需要帮助修复它。

问题很简单。在for()循环的右括号后,您有一个分号。当我回答你的上一句话时,我在for循环后加上分号的唯一原因是因为我不需要在for循环体中添加任何东西。这与您使用getline(cin, name_list[n])的代码形成对比,我认为这是一个用于for循环体的语句。

在这种情况下,你不能在for循环后添加分号。它所做的只是运行for循环11次而不执行任何语句,然后它将继续到下一行,它将从std::cin读取一行到向量的第一个插槽。这当然不是故意的。解决方法是删除分号。

for (int n = 0; n < 11; ++n) // <-- semicolon gone
    std::getline(std::cin, name_list[n]);

我还看到你的#include语句后面有分号。这些也无效,请删除它们。

答案 2 :(得分:0)

只需删除分号

即可
#include <iostream>;
                   ^
#include <vector>;
                 ^
#include <string>;
                 ^

for (int n = 0; n < 11; ++n);
                            ^
getline(cin, name_list[n]);

并且所有值都将在向量中结束。请注意,在它之后,您只打印第一个值

cout << name_list[0];

循环播放以打印完整内容:

for ( int i = name_list.size(); i--; )
{
     cout << name_list[i] << endl;
}