Конвертация типов переменных на c++
Я читаю <<Страуструп Б. - Программирование. Принципы и практика с++>>. Задание звучит так:
- Напишите программу, содержащую цикл while, в котором считываются и выводятся на экран два целых числа. Для выхода из программы введите символ |.
- Измените программу так, чтобы она выводила на экран строку "Наименьшее из двух значений равно:", а затем — меньшее и большее значения. Я написал, но нашел баг: при введении 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;
}
Причём эта программа будет завершаться не только, если вместо числа был введён символ |, но и при других нечисловых значениях.