点击进入后C ++ cin没有返回

时间:2017-04-16 05:50:06

标签: c++ c++11 vector cin

所以我希望能够输入如下内容: '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;
}

2 个答案:

答案 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循环中断时。

在我看来,你真正想要的是:

  1. 阅读一行文字。您可以使用std::getline
  2. 阅读文字行中的数字。您可以使用std::istringstream
  3. 输出数据。
  4. 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)

思考程序解析输入的方式。首先,在每个数字后总是需要逗号,在输入结束时是否需要它?其次,您如何看待您的阅读未能结束循环?

这就是为什么你需要输入两个字符,一个作为分隔符输入结尾,第二个使整数读取失败。