如何在C ++中从键盘读取可变数量的整数?

时间:2018-12-06 12:38:21

标签: c++ cin

我需要从键盘上读取可变数量的整数,以便可以使用它们中的每一个。

首先我想我可以使用类似的东西

    int myinteger;
    for (int i=0; i<MAX_NUMBER_OF_INTEGERS; i++){
    cin >> myinteger;
    //What I want to do with that Integer
    }

但是后来我意识到,如果MAX_NUMBERS_OF_INTEGERS = 10,我必须写10个整数。但是我想要的是我可以传递“ 1 2 3”“ 1 2 3 4”(例如),而不必写10个整数。

3 个答案:

答案 0 :(得分:2)

自从提出问题以来,这个问题似乎已经有所改变,并且给出了很好的答案。这只是用来回答新问题。

#include <iostream>
#include <sstream>
#include <vector>

const int MAX_NUMBERS_OF_INTEGERS = 10;

int main() {
    std::string line;
    std::cout << "Enter at most " << MAX_NUMBERS_OF_INTEGERS << " ints, separated by spaces: ";
    std::getline(std::cin, line);

    // create a string stream of the line you entered
    std::stringstream ss(line);

    // create a container for storing the ints
    std::vector<int> myInts;

    // a temporary to extract ints from the string stream
    int myInteger;

    // extract at most MAX_NUMBERS_OF_INTEGERS ints from the string stream
    // and store them in the container
    while(myInts.size()<MAX_NUMBERS_OF_INTEGERS && ss>>myInteger) myInts.push_back(myInteger);

    std::cout << "Extracted " << myInts.size() << " integer(s)\n";

    // loop through the container and print all extracted ints.
    for(int i : myInts) {
        std::cout << i << "\n";
    }
    // ... or access a certain int by index
    if(myInts.size() > 2)
        std::cout << "The third int was: " << myInts[2] << "\n";

}

答案 1 :(得分:1)

    final Categories_Data_holder listItem = listItems.get(position);
    listItem.getCategories_id();
    holder.biography.setText(listItem.getBio());
    Picasso.with(context)
            .load(listItem.getImageUrl())
            .into(holder.imageView);
    holder.biography.setText(listItem.getBio());

   // Intent i = ((Cricket_Categorie)context).getIntent();


    //Setting OnClickListner on Views:-
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent ii = null;
            switch (position){
                case 0:
           ii = new Intent(v.getContext(), Activity.class);

                    break;

                case 1:
                    ii = new Intent(v.getContext(), ActivityII.class);
                    break;
            }
            context.startActivity(ii);

        }
    });



}

我还没有测试过该解决方案,但是它应该从cin读取任意数量的int,直到您输入除整数以外的其他值。如果不需要保存结果,也可以跳过矢量部分中的保存。如果您想保存任意数量的整数,那么这很轻松。

编辑:澄清后,您的解决方案应如下所示:

std::vector<int> read_ints;
int _temp;
for(;;)
{        
    cin >>_temp;
    if(!cin.good()) {
        break;
    }
    else {
        read_ints.push_back(_temp);
    }
}

setw限制了输入字符的数量,但您必须包括iomanip标头

如果要访问每个数字,请使用以下功能将int转换为int的向量:

 int MAX_CHARS = 10;
 int my_int;
 cin >> setw(MAX_CHARS) >> my_int;

然后您可以使用索引访问每个数字,例如第一位

vector <int> integerToArray(int x)
{
    vector <int> resultArray;
    while (true)
    {
        resultArray.insert(resultArray.begin(), x%10);
        x /= 10;
        if(x == 0)
            return resultArray;
    }
 }

Source

答案 2 :(得分:1)

从一行读取所有数字并将其限制为最大整数的一种方法是使用std :: getline()将行变成字符串,然后在循环中使用istringstream。

#include <iostream>
#include <sstream>
using namespace std;

int main() {
    std::string line; 
    std::getline (std::cin,line); 
    std::istringstream iss(line);

    int myInt;

    for(int i=0;(iss >> myInt) && (i < MAX_NUMBER_OF_INTEGERS);++i ) {
        std::cout << myInt << ' ';
    }

    return 0;
}

注意:我没有在代码中定义MAX_NUMBER_OF_INTEGERS。我可以在使用前用const int MAX_NUMBERS_OF_INTEGERS = 10;来定义它,或者可能是一个预处理器定义,甚至是一个命令行参数。我把这留给用户。