所以我希望能够输入如下内容: '6,-15,12,44,......'然后将这些整数添加到矢量中。 但是,当我输入所述输入并按回车键时,它什么也没做。如果我然后输入一个字母然后按回车键,然后输入另一个字母并按回车键,它最终会返回所需的结果。 如果我输入更多数字并按回车键,它将继续返回任何内容。 有人可以指出我在这里出错的正确方向吗?多谢你们。我希望我对这个问题的解释是有道理的。
int main()
{
// The user inputs a string of numbers (e.g. "6, 4, -2, 88, ..etc") and those integers are then put into a vector named 'vec'.
std::vector<int> vec;
int value;
std::cin >> value;
if ( std::cin )
{
vec.push_back( value );
char separator;
while ( std::cin >> separator >> value )
{
vec.push_back( value );
}
}
std::cout << vec.size() << std::endl;
for ( int i = 0; i < vec.size(); i++ )
{
std::cout << vec.at(i) << ' ';
}
std::cout << std::endl;
}
答案 0 :(得分:2)
然而,当我输入所述输入并按回车键时,它什么也没做。
这是对程序功能的错误解释。在程序中添加一些调试输出,您会注意到程序正在处理您的输入。
while ( std::cin >> separator >> value )
{
std::cout << "Read separator: " << separator << std::endl;
std::cout << "Read value: " << value << std::endl;
vec.push_back( value );
}
如果我输入一个字母并按回车键,然后输入另一个字母并按回车键,它最终会返回所需的结果。
您似乎希望程序在输入一行文字后停止阅读输入。
您已编写程序,当您按 Enter 时,while
循环不会停止。它等待下一行的其他输入。
通过输入一封信,您已为separator
提供了输入。通过输入另一个字母,您已将std::cin
置于错误状态。当while
循环中断时。
在我看来,你真正想要的是:
std::getline
。std::istringstream
。int main()
{
// The user inputs a string of numbers (e.g. "6, 4, -2, 88, ..etc") and those integers are then put into a vector named 'vec'.
std::vector<int> vec;
std::string line;
if ( getline(std::cin, line) )
{
std::istringstream str(line);
int value;
str >> value;
vec.push_back( value );
char separator;
while ( str >> separator >> value )
{
vec.push_back( value );
}
}
std::cout << vec.size() << std::endl;
for ( int i = 0; i < vec.size(); i++ )
{
std::cout << vec.at(i) << ' ';
}
std::cout << std::endl;
}
答案 1 :(得分:0)
思考程序解析输入的方式。首先,在每个数字后总是需要逗号,在输入结束时是否需要它?其次,您如何看待您的阅读未能结束循环?
这就是为什么你需要输入两个字符,一个作为分隔符输入结尾,第二个使整数读取失败。