如何在达到新行之前运行while循环?

时间:2017-07-19 10:49:50

标签: c++ vector

我需要通过std :: cin设置一个单词作为字符向量,直到达到换行符(' \ n')。 以下是我到目前为止所做的事情:

#include "stdafx.h"
#include <iostream> 
#include <vector> 


int main(){
std::vector<char> one1; //A char vector that holds the first 'word'
std::cout << "Type in the first set of charactors: " << std::endl;
char o;
std::cin >> o;
int i = 0;
while (std::cin >> o && o != '\n' && o != 0) {
    one1[i] = o;
    i++;
    std::cin >> o;
}
std::cout << "Done"; 

    return 0;
}

它不断返回错误,而不是编译错误,但在运行时,出现此错误:

Debug Assertian失败!

程序:C:\ WINDOWS \ SYSTEM32 \ MSVCP140D.dll 文件:c:\ program files(x86)\ microsoft visual studio 14.0 \ VC \包括\矢量 行:1234

表达式:向量下标超出范围

我不知道什么是错的,或者导致这种情况发生的原因,我该怎么办?

3 个答案:

答案 0 :(得分:3)

您正在循环结束时读取一个字符,并在while条件下立即读取另一个字符。因此,每个第二个角色都会被忽略,您可能会错过'\n'

此外,[]访问向量中的现有元素,您无法使用它来添加它。您需要使用push_back

答案 1 :(得分:2)

您的代码中存在未定义的行为。您可以访问不存在的元素。

std::vector<char> one1;

你的矢量是空的。因此,如果您想添加它,则需要使用push_back

one1.push_back(o);

答案 2 :(得分:1)

如果您想阅读一行,请使用getline功能。

Getline在一个字符串中存储一行,然后将该字符串转换为向量(Converting std::string to std::vector<char>

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

int main()
{
  std::cout << "Type in the first set of charactors: " << std::endl;
  std::string line;
  std::getline(std::cin, line);
  std::vector<char> one1(std::begin(line), std::end(line)); //A char vector that holds the first 'word'
  std::cout << "Done"; 
  return 0;
}