Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском.
Закрыт 1 год назад.
#include "stdafx.h"
#include <iostream>
#include "typeinfo"
#include <conio.h>
#include <string>
#include <cstdlib>
#include <istream>
#include <cctype>
#include <limits>
using namespace std;
int main()
{
setlocale(LC_CTYPE, "rus");
string a, b;
int A, B;
int result = NULL;
int flag_a = 0;
int flag_b = 0;
char op;
do {
do
{
if (result != NULL)
a = result;
if (result == NULL)
{
cout << "Введите первый операнд: ";
getline(cin, a);
}
for (int i = 0; i < a.length(); i++)
{
if (!isdigit(a[i]))
{
flag_a++;
break;
}
}
if (flag_a > 0)
{
cout << "Вы ввели не число, пожалуйста повторите попытку." << endl;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
flag_a = 0;
continue;
}
else
{
A = atoi(a.c_str());
break;
}
} while (true);
do {
cout << "Введите операцию: ";
cin >> op;
if ((op != '+') && (op != '-') && (op != '*') && (op != '/'))
{
cout << "Вы ввели некорректную операцию" << endl;
cout << "Возможные операции: + - * /" << endl;
cin.clear(); // на случай, если предыдущий ввод завершился с ошибкой
cin.ignore(numeric_limits<streamsize>::max(), '\n');
result = NULL;
continue;
}
else break;
} while (true);
do {
cout << "Введите второй операнд: ";
getline(cin, b);
for (int i = 0; i < b.length(); i++)
{
if (!isdigit(b[i]))
{
flag_b++;
break;
}
}
if (flag_b > 0)
{
cout << b << endl;
cout << "Вы ввели не число, пожалуйста повторите попытку." << endl;
system("pause");
cin.ignore(numeric_limits<streamsize>::max(), '\n');
flag_b = 0;
continue;
}
else
{
B = atoi(b.c_str());
break;
}
} while (true);
if (op == '+')
{
result = A + B;
cout << result << endl;
}
if (op == '-')
{
result = A - B;
cout << result << endl;
}
if (op == '*')
{
result = A*B;
cout << result << endl;
}
if (op == '/')
{
result = A / B;
cout << result << endl;
}
} while (true);
system("pause");
return 0;
}
Добрый день всем! Помогите новичку, пожалуйста. На практике дали задание написать несложный калькулятор с поддержкой базовых математических функций - сложения, умножения, вычитания и деления. Калькулятор должен контролировать корректность введенных пользователем данных, что я и попытался реализовать. Проверка первого операнда на то, является ли он числом проходит успешно, но дальше происходит что-то не совсем мне понятное. Как только мы доходим до присвоения значения второму операнду программа присваивает ему значение первого и говорит, что это не число. В чем может быть проблема?
getline
конфликтует с оператором >>
. Используйте только
cin >> a ;
и не будет проблем.a = result;
делает не то, что вы думаете. Вы строке присваиваете один символ с кодом математического результата. Нужно присваивание числа строке делать по-другому. Например a = std::to_string(result);
.NULL
. Он имеет тип указателя, а вы присваиваете указатель целому числу. Можно просто написать 0
.Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Какая сделать явную специализацию для функции foo оставив const T* arr??
Что нужно сделать, чтобы спрайт не растягивался в месте с окном?
Пишу под линукс в Qt5Как сделать так,что бы проект тянул библиотеки стандартные(Qt5Gui,Qt5Core
Так вот, я начал писать класс для реализации строки C++, хотя использую я методики из C, впрочем сейчас это неважноКак и обычный класс string из STL основная...