2014-04-09 81 views
0

好吧,所以我想读输入到一个向量,然后按相反的顺序打印出来。 我有一个相当不错的想法如何做到这一点(我认为),但我的问题是,我的代码只读取用户输入到矢量的第一个插槽。 。 。我需要它从输入读取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; 
} 

回答

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")); 
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声明后有分号。这些也是无效的,请删除它们。

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; 
}