Конвертация типов переменных на c++

Я читаю <<Страуструп Б. - Программирование. Принципы и практика с++>>. Задание звучит так:

  1. Напишите программу, содержащую цикл while, в котором считываются и выводятся на экран два целых числа. Для выхода из программы введите символ |.
  2. Измените программу так, чтобы она выводила на экран строку "Наименьшее из двух значений равно:", а затем — меньшее и большее значения. Я написал, но нашел баг: при введении 5 и 48 (или подобного) прога выбирает 5.
#include<iostream>
#include<string>
using namespace std;

int main()
{
    string a;
    string b;
    while (a != "|")  
    {
        cout << "Введите первое число: ";
        cin >> a;
        if (a == "|") break;
        cout << "Введите второе число: ";
        cin >> b;
        if (b == "|") break;
        if (a > b)
        {
            cout << a << " больше, чем " << b << endl;
        }
         if (a < b)
        {
            cout << b << " больше, чем " << a << endl;
        }
    }
}```

Ответы (1 шт):

Автор решения: NunOfIt

В данном случае вы сравниваете не числа, а строки. Из-за этого и возникает "баг", исправить это можно либо конвертируя их в числа (функция stoi), либо не используя тип std::string вообще, например так:

#include<iostream>

int main() {
    int a, b;
    while(true) {
        std::cout << "Введите числа (a b): ";
        if(!(std::cin >> a)) { break; }
        if(!(std::cin >> b)) { break; }

        if(a > b) { std::swap(a, b); }
        std::cout << "Наименьшее из двух значений равно " << a << "; " << b << '\n';
    }
    return 0;
}

Причём эта программа будет завершаться не только, если вместо числа был введён символ |, но и при других нечисловых значениях.

→ Ссылка