Другие языки программирования и технологии
Как реализовать проверку ввода данных на C++?
У меня простоя программа: вводиться размерность массива. Как проверить, что введено целое число? Только использовать нужно не try, а if.
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
unsigned long input_natural_number(string = "Введите натуральное число: ");
void msg_error();
int main() {
setlocale(2, "");
unsigned long size = input_natural_number("Введите размер массива: ");
int* a = nullptr;
if (a = new(nothrow) int[size]) {
for (unsigned long i = 0; i < size; ++i) a[i] = i * i;
for (unsigned long i = 0; i < size; ++i) cout << a[i] << ' ';
cout << endl;
delete[] a;
a = nullptr;
}
cin.get();
}
unsigned long input_natural_number(string msg) {
long long n;
string tmp;
do {
cout << msg;
getline(cin, tmp);
if (!tmp.length()) msg_error();
else {
stringstream s;
s << tmp;
s >> n;
if (!s) msg_error();
else {
if (n > 0 && n <= ULONG_MAX) return (unsigned long)n;
else msg_error();
}
}
} while (true);
}
void msg_error() { cout << "\aОшибка! \n"; }
#include <string>
#include <sstream>
using namespace std;
unsigned long input_natural_number(string = "Введите натуральное число: ");
void msg_error();
int main() {
setlocale(2, "");
unsigned long size = input_natural_number("Введите размер массива: ");
int* a = nullptr;
if (a = new(nothrow) int[size]) {
for (unsigned long i = 0; i < size; ++i) a[i] = i * i;
for (unsigned long i = 0; i < size; ++i) cout << a[i] << ' ';
cout << endl;
delete[] a;
a = nullptr;
}
cin.get();
}
unsigned long input_natural_number(string msg) {
long long n;
string tmp;
do {
cout << msg;
getline(cin, tmp);
if (!tmp.length()) msg_error();
else {
stringstream s;
s << tmp;
s >> n;
if (!s) msg_error();
else {
if (n > 0 && n <= ULONG_MAX) return (unsigned long)n;
else msg_error();
}
}
} while (true);
}
void msg_error() { cout << "\aОшибка! \n"; }
Считаешь в int из cin, потом ифом проверяешь состояние cin.
А с try удобнее. stoi, и все дела.
Ну тогда предлагаю atoi и потом обратно. И сравнить с оригиналом. Или strtol / strtoul, и проверять errno
Ну тогда предлагаю atoi и потом обратно. И сравнить с оригиналом. Или strtol / strtoul, и проверять errno
а в учебниках что об этом говорят?
можно сделать так, создаём int a, a1и float b; вводим значение во float и присвоим его инту, потом к флоат прибавим 0.99999, и присваиваем значение a1. сравниваем a1 и а. Если совпало, то 99.9% того что введено число целое:
int a,a1; float b;
cin>>b;
a=b;
b+=0.99999;
a1=b;
if(a==a1){cout<<"celoe";}
int a,a1; float b;
cin>>b;
a=b;
b+=0.99999;
a1=b;
if(a==a1){cout<<"celoe";}
Похожие вопросы
- C++ Проверка правильности ввода данных.
- Процедуры в PascalABC.NET. Ввод данных
- Как написать свою программу для ввода данных, чтоб потом эти данные сохранялись в определённом тхт файле
- Докончите программу, Реализуйте проверку на победу одного из игроков, минимум две комбинации для одного и для другого.
- Java ввод данных из консоли
- Как написать Базу данных На C++ Visual Studio 2010
- С++ Проверка на некорректный ввод значения переменной
- Оператор ввода в C#
- C++: файловый ввод-вывод.
- Как в C# скрыть ввод и вывод данных в консоль?