我需要通过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
表达式:向量下标超出范围
我不知道什么是错的,或者导致这种情况发生的原因,我该怎么办?
答案 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;
}