C ++ Как прочитать больше целых чисел в одной строке в функции? - PullRequest
0 голосов
/ 25 декабря 2018

В настоящее время у меня есть функция, которая читает одно целое число и проверяет наличие ошибок (слишком большое, слишком маленькое или не целое число.

int be_egesz(string question, int minval, int maxval, string error_message)
{
    bool error;
    string tmp;
    int number;
    do
    {
        cout << question << endl;
        cin >> szam;
        error=cin.fail() || cin.peek()!='\n' || (number<minval || number>maxval);
        if (error)
        {
            cout << error_message << endl;
        }
        cin.clear();
        getline(cin,tmp,'\n');
    }while(error);
    return number;
}

Как преобразовать эту функцию, чтобы она могла читать больше, чем1 целое число в одной строке?

Пример ввода: 1 2

Или, может быть, как я могу использовать эту функцию 2 раза для одной строки

Ответы [ 3 ]

0 голосов
/ 25 декабря 2018

Здесь важно сказать, я думаю, что оператор >> по умолчанию извлекает из потока (stdin в вашем случае) все символы до следующего пробела.Поэтому, если в стандартном вводе вы пишете 1 2, вам нужно два вызова оператора >>, чтобы прочитать и 1, и 2. Однако они не должны быть в одной строке кода.

Если вам нужно проверить один номер за один раз, вы можете просто снова вызвать вашу функцию.Возьмите этот пример:

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main() {
    int x;
    string str;

    getline(std::cin, str);
    stringstream ss(str);

    while (! ss.eof()) {
        ss >> x;
        cout << "Num: " << x << endl;
    }
    return 0;
}

Этот код читает одну строку ввода с помощью getline и сохраняет ее в строке str.Затем он создает stringtream с копией этой строки и в цикле while извлекает одно число сразу (останавливает извлечение символов в каждом пробеле) до тех пор, пока поток не станет пустым.Следовательно, цикл выполняется один раз для каждого числа на входе.

Если вы введете на входе:

1 2 3 4

Вы получите:

Num: 1
Num: 2
Num: 3
Num: 4

Таким образом, вы можете вставить свою функциюв похожем коде и вызвать его внутри цикла.

0 голосов
/ 25 декабря 2018

Моя главная проблема - расследование ошибок.

0 голосов
/ 25 декабря 2018

Как насчет std::cin и чтения двух переменных?

#include <iostream> 
using std::cout;
using std::cin;

int main() {
    int x;
    int y;

    cin>>x>>y;

    cout<<"Value 1: "<<x<<"\n"<<"Value 2: "<<y<<"\n";
return 0;
}

Ввод:

1 5

Выход:

Value 1: 1
Value 2: 5

Вы также можете использовать более2 целых значения:

int x;
int y;
int z;

cin>>x>>y>>z;

И сравнение их, если они слишком велики или малы, аналогично любому другому сценарию:

cin>>x>>y;

if(x > 10)
    cout<<x<<" is Greater than 10\n";

if(y > 10)
    cout<<y<<" is Greater than 10\n";
...