c++ отправляется и второй cin
Изучаю С++ и пишу тупой калькулятор. Возникла какая-то фигня, когда я ввожу 1 число, нажимаю Enter, то отправляется и второе число.
Ниже привел код:
// Учу с++.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
//
#include <iostream>
#include <dos.h>
// Избегаем кода std:: через using namespace std
using namespace std;
int add(char num1, char num2)
{
return (int)num1 + (int)num2;
}
int min(char num1, char num2)
{
return (int)num1 - (int)num2;
}
int main()
{
setlocale(LC_ALL, "Russian");
char num1;
char num2;
char mode;
cout << "Число 1: ";
cin >> num1;
cout << "\nЧисло 2: ";
cin >> num2;
cout << "\n1: +\n2: -\nВведите режим:";
cin >> mode;
if (mode == '1') {
int result = add(num1, num2);
cout << "\n" + result;
}
else if (mode == '2') {
int result = min(num1, num2);
cout << "\n" + result;
}
}
// Запуск программы: CTRL+F5 или меню "Отладка" > "Запуск без отладки"
// Отладка программы: F5 или меню "Отладка" > "Запустить отладку"
// Советы по началу работы
// 1. В окне обозревателя решений можно добавлять файлы и управлять ими.
// 2. В окне Team Explorer можно подключиться к системе управления версиями.
// 3. В окне "Выходные данные" можно просматривать выходные данные сборки и другие сообщения.
// 4. В окне "Список ошибок" можно просматривать ошибки.
// 5. Последовательно выберите пункты меню "Проект" > "Добавить новый элемент", чтобы создать файлы кода, или "Проект" > "Добавить существующий элемент", чтобы добавить в проект существующие файлы кода.
// 6. Чтобы снова открыть этот проект позже, выберите пункты меню "Файл" > "Открыть" > "Проект" и выберите SLN-файл.
В консоли я ввожу первым число 10, потом нажимаю Enter, и вижу такую картину:
Число 1: 10
Число 2:
1: +
2: -
Введите режим:
Хотя я поле Число 2 не оставлял пустым, консоль сама оставила его пустым. Я думаю это из за скорости С++ и он думает что я оставил поле пустым, пробовал задержку но задержка не работает.
Ответы (1 шт):
Подозреваю, что Вы хотите вводить числа как строки, я правильно понимаю? Тогда давайте по порядку.
Во-первых, тип char используется не для передачи чисел, а для передачи отдельных символов, т.е. в переменной данного типа может хранится лишь один ASCII-символ. Вместо этого типа можно либо спокойно использовать один из существующих целочисленных типов данных (int, long, long long и прочее с unsigned — подробнее здесь), либо использовать тип string.
Допустим, мы используем строковый тип данных, тогда для его преобразования в тип int мы используем функцию stoi() (либо stol(), либо stoll() с соответствующими изменениями).
Наконец, в конце Вы выводите данные таким образом:
int result = add(num1, num2);
cout << "\n" + result;
хотя на самом деле ничего из подобного не выведется. Чтобы нормально вывести два и более литерала через <<, нужно разделить КАЖДЫЙ из них <<:
int result = add(num1, num2);
cout << "\n" << result; // можно ещё использовать endl вместо "\n"
Окончательно, работающий код будет выглядеть примерно вот так:
#include <iostream>
using namespace std;
int add(string num1, string num2)
{
return stoi(num1) + stoi(num2);
}
int min(string num1, string num2)
{
return stoi(num1) - stoi(num2);
}
int main()
{
setlocale(LC_ALL, "Russian");
string num1;
string num2;
char mode;
cout << "Число 1: ";
cin >> num1;
cout << "\nЧисло 2: ";
cin >> num2;
cout << "\n1: +\n2: -\nВведите режим:";
cin >> mode;
if (mode == '1') {
int result = add(num1, num2);
cout << "\n" << result;
}
else if (mode == '2') {
int result = min(num1, num2);
cout << "\n" << result;
}
}
/*
Число 1: 861
Число 2: 711
1: +
2: -
Введите режим:1
1572
*/