Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
Pifagor_04
0 / 0 / 0
Регистрация: 17.05.2015
Сообщений: 12
1

Проверка на ввод числа

17.05.2015, 20:52. Просмотров 4162. Ответов 3
Метки нет (Все метки)

Приветствую! Ребят возникла такая проблемка, я новичок и очень много ещё не знаю, прежде я конечно покопался здесь, но ответа не нашел. Так вот в чём она заключается.
Я хочу сделать проверку на ввод чисел, то есть просим ввести число, пользователь вводит его, но надо предусмотреть, чтобы кроме цифр ничего не было. Кто подскажет мне?

P.S. Пишу консольное приложение. Пользовался функцией scanf("%d",&i), путем экспериментов, осознал что если первый символ не является цифрой, то выкидывать из программы будет, если цифра, то в переменную он будет записывать все цифры, то того пока не встретится символ.
Но мне требуется, что если хоть один символ будет введен, мы будем просить пользователя ввести по новой.
Думал решить через символьный массив, ну делаем ввод в символьный массив, после через через функцию atoi прогонял, но она оказался действует также, как и scanf.
В итоге я пришел к выводу, что кроме как проверять посимвольно весь массив символов, проблему не решить))
Но может кто подскажет, есть ли функция, уже созданная, которая вернет нам число или скажет, что введенное пользователем не является числом?))
P.S. P.S. Извиняюсь, за грамматику))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2015, 20:52
Ответы с готовыми решениями:

Проверка на ввод числа
do { cin.clear(); cin.sync(); cout << "Введите N: "; cin>>N;...

Проверка на корректный ввод числа
Мне нужно вывести hello world то количество раз, какое напишет пользователь, но...

Проверка на корректный ввод числа
Вводится число, если оно введено верно, нужно вывести hello world это...

Проверка на ввод C++
алгоритм-1: 1)ввод x (например 1) 2)вывод y 3)расчет заново (y/n)...

Проверка на ввод
в borland С нужно осуществить проверку на ввод, пользователь дожлен ввести...

3
bogdan_017
21 / 21 / 19
Регистрация: 18.03.2014
Сообщений: 148
17.05.2015, 23:46 2
Pifagor_04, все символы имеют ASCII-код (уникальный код для определения символа). Если я не ошибаюсь ASCII-код цифр начинается со значения "48". Т.к. цифр всего десять, значит последнее значение "57".

Теперь ближе к вашей теме: как вариант, можно принимать из консоли строку символов, проверяя затем каждый символ на то, является ли он цифрой. Примерно это так выглядит:
C++
1
2
3
4
5
6
7
8
9
10
11
//объявили строку и ввели
char str[100];
cin>>str;
 
//Есть смысл определить одну логическую переменную
//чтобы знать, как закончился цикл
bool IsBreak=false;
 
//проверяем, является ли строка числом
for (int i=0; str[i]!='\0'; i++) //как вариант можно использовать i<strlen(str) в условии цикла
 if (str[i]<48 || str[i]>57) {cout<<"Не число"; IsBreak=true; break;}
Далее, если IsBreak==true, то попросить пользователя ввести число заново.
1
Pifagor_04
0 / 0 / 0
Регистрация: 17.05.2015
Сообщений: 12
18.05.2015, 01:11  [ТС] 3
bogdan_017, Благодарю за ваш ответ))
Но к сожалению это не то, чего хотелось бы)) Хоть я пользовался библиотекой <stdio.h>, то есть функции printf и scanf, разницы от этого не меняется))
Цитата Сообщение от Pifagor_04 Посмотреть сообщение
В итоге я пришел к выводу, что кроме как проверять посимвольно весь массив символов, проблему не решить))
, Но как раз вы посимвольно проверяете, а это я и сам уже осуществил, только как выше написал через функции printf и scanf))
Просто я одногруппникам пишу программку, точнее памятку, они совсем так скажем "дурачки", чтобы им меньше было в коде писать, то и требовалась бы функция, которую им бы самим писать не пришлось бы, а воспользоваться можно было бы))
0
lss
930 / 859 / 355
Регистрация: 10.10.2012
Сообщений: 2,705
18.05.2015, 01:44 4
// в строке ввода только цифры, перед которыми могут быть + или -, в других случаях - повторный ввод.
C++
1
2
3
4
5
6
7
int a;
while (!(cin >> a) || (cin.peek() != '\n'))
{
    cin.clear();
    while (cin.get() != '\n');
    cout << "Error!" << endl;
}
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2015, 01:44

Проверка на ввод
Есть переменная целочисельная ввожу ее с клавиатуры , но когда ввожу букву...

Проверка на ввод
Всем доброго времени суток. Помогите пожалуйста дописать программу, чтобы...

Проверка числовой ли ввод
Здравствуйте! Задача такая. Написать программу, читающую в массив double до 10...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru