В этом приложении входным данным должно быть натуральное число, при вводе целого или нуля и нажатия Enter программа начинается сначала и так пока не будет введено корректное значение. Тогда она вычисляет сумму факториалов натуральных чисел от 1 до введённого натурального числа. Но защита с помощью оператора else от неправильного ввода не работает против действительных чисел, дробное число воспринимается программой как 2 натуральных числа и программа после ввода дробного числа выполняется два раза подряд, первый раз для натурального числа идущего до точки и второй раз для натурального числа идущего после точки. Как защититься от ввода дробных чисел или чисел выходящих за диапазон типа переменной?
#include <iostream>
using namespace std;
long double factor (short x)
{
long double k=1;
short i;
for (i=1; i<=x; i++) k=k*i;
return k;
}
int main()
{
long double s;
short i, n;
char ch;
while ((ch=cin.get())='\n')
{
cout << "Vvedi naturalnoe chislo N<=1754: ";
cin >> n;
if (n>0)
{
s=0;
for (i=1; i<=n; i++) s=s+factor(i);
if (n==1) cout << "S=1!=";
else if (n==2) cout << "S=1!+2!=";
else cout << "S=1!+...+" << n << "!=";
cout.precision(16);
cout << std::uppercase << s << endl << endl;
}
}
return 0;
}
string str;
cin >> str;
try {
unsigned long num = stoul(str);
if (num == 0)
throw out_of_range("Number is zero");
doProcess(num);
catch (exception e) {
cout << e.what();
}
Сохраняйте это значение в Int или long long, десятичная часть сама обрежется Либо,
double a;
cin>>a;
int b = a;
if (abs(a-b) != 0)
cout <<"введите натуральное число"<<endl;
Раз вы написали свой, я напишу свой вариант
string s;
getline(cin, s);
transform(s.begin(), s.end(), s.begin(),
[](char c) { if(!isdigit(c)) c = ' '; return c; });
istringstream is(s);
vector<int> integers;
int n = 0;
while(is >> n)
integers.emplace_back(n); // в векторе хранятся ваши числа
может быть я не очень хорошо понел что вам нужно...
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Я хочу получить информацию о модуле в системеДопустим, есть драйвер в системе Example
В Qt приложении пи запуске таймеров и в основном и в отдельном потоке, программа падаетМожно ли это делать и как сделать корректно?
хорошего дня Существует открытый код браузера Mozilla FireFoxКогда мы заходим на какой-либо сайт, то загружается множество jscript