向量的显示元素

时间:2019-01-24 21:22:17

标签: c++

我正在尝试学习C ++作为我的第一语言,并且我想为我的这个愚蠢的问题道歉。  我想用整数填充两个向量并显示其大小,但是每次检查它们的元素数量时,都会收到意外的结果。也许我缺少一些基本知识。这是我的代码:

`

var Fire = [];

var fire = function FireGen()
{
    this.particle = [];
    var part = function Particle()
    {
    };
    this.particle.push(new part);
};
Fire.push(new fire);

console.log(Fire[0].particle.length);

每次在此糟糕的代码中,int_var的第一个值都会转到第二个向量,该向量中只能包含数字> 16。如果有人告诉我我错了,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

我推荐以下策略。

  1. 循环读取文件/ cin的内容。
  2. 如果该行包含要停止的指令,请停止循环。
  3. 使用std::istringstream从行中提取必要的数据。
  4. 如果提取数据时出错,请处理该错误。否则,请使用数据。

std::string line;
while (getline(std::cin, line) )
{
   if ( line == "stop")
   {
      break;
   }

   std::istringstream str(line);

   if ( str >> int_var )
   {
      // Data extraction was successful. Use the data
      if (int_var > 16)
      {
         adults.push_back(int_var);
      } 
      else if (int_var <= 16)
      {
         kids.push_back(int_var);
      }
   }
   else 
   {
      // Error extracting the data. Deal with the error.
      // You can choose to ignore the input or exit with failure.
   }
}

答案 1 :(得分:0)

这是使用std::stoi的替代解决方案,正如我的评论所建议的:

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

int main(/*int argc, char** argv*/)
{

    std::string entry;
    std::vector<int> adults;
    std::vector<int> kids;
    int int_var;

    while (std::getline(std::cin, entry) && entry != "stop")
    {
        try
        {
            int_var = std::stoi(entry);

            if (int_var > 16)
            {
                adults.push_back(int_var);

            }
            else
            {
                kids.push_back(int_var);
            }
        }
        catch (const std::exception& /*ex*/)
        {
            std::cout << "Oops, that wasn't a valid number. Try again.\n";
        }
    }

    std::cout << "Number of adults: " << adults.size() << '\n';
    std::cout << "Number of kids: " << kids.size() << '\n';
}