Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Van111
211 / 190 / 4
Регистрация: 03.08.2011
Сообщений: 2,630
Записей в блоге: 12
#1

scanf проверка вводимого типа - C++

28.12.2013, 11:22. Просмотров 1749. Ответов 9
Метки нет (Все метки)

как узнать, что пользователь ввёл не число а строку, если от него требовалось первое и запрос проходил через функцию scanf?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2013, 11:22
Я подобрал для вас темы с готовыми решениями и ответами на вопрос scanf проверка вводимого типа (C++):

Проверка типа вводимого с клавиатуры элемента - C++
Я создаю массив элементов типа double, ввод элементов с клавиатуры! Как мне проверить вводит ли пользователь именно числа, а не что то...

Проверка вводимого символа - C++
Привет.Помогите,надо сделать так ,чтобы в консольной программе при вводе цифр,вместо букв,выдавало ошибку

Проверка вводимого значения на соответствие индексу массива - C++
Доброго времени суток, подскажите как реализовать работу поиска индекса по введенному значению. Т.е. как найти нужный индекс по значению...

Реализовать проверку типа вводимого пользователем значения, которым будет инициализировано поле структуры - C++
Товарищи, поомогите пожалста. есть код, проблема в том что если в переменную code вводят НЕ число, программа зацикливается. вопрос -...

Проверка типа - C++
int n; std::cin >> n; Как проверить тип введённых данных? Ведь если введено не int, то программа будет работать не так, как мне...

Проверка типа (typeid) - C++
Подскажите пожалуйста как можно правильно реализовать такую вещь: если тип переменной и == int то.... нагуглил функцию:...

9
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.12.2013, 12:25 #2
проверяй возвращаемое значение scanf
0
Van111
211 / 190 / 4
Регистрация: 03.08.2011
Сообщений: 2,630
Записей в блоге: 12
28.12.2013, 23:04  [ТС] #3
Цитата Сообщение от Jupiter Посмотреть сообщение
проверяй возвращаемое значение scanf
не вариант , потому, что если происходит ошибка ввода, то ни какое значение переменной не присваивается, а следственно как мы будем сверять значение? ну допустим переменной можно присвоить экзотическое число -1234321 , навряд ли такое пользователь введёт, но всё таки это же не корректно.
нашёл такое решение, проверка флага в структуре FILE , stdin->_cnt > 1 если больше единицы, то была введена строка, если единица, то была введена цифра.
P.S. забыл сказать условие было такое, что программу нужно писать на СИ поэтому функции потоковых объектов ввода вывода не подходят
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.12.2013, 23:11 #4
Цитата Сообщение от Van111 Посмотреть сообщение
не вариант , потому, что если происходит ошибка ввода, то ни какое значение переменной не присваивается, а следственно как мы будем сверять значение?
сканф - функция, функции могут возвращать значения с помощью return. почитай доку что возвращает scanf
1
alsav22
5437 / 4832 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.12.2013, 23:41 #5
C++
1
2
3
int a;
if (!scanf("%d", &a))
    printf("Error scanf!\n");
0
Tulosba
:)
Эксперт С++
4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
28.12.2013, 23:45 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <cstdio>
 
int main() {
    
    int i = 0;
    
    if( 1 != scanf( "%d", &i ) )
    {
        std::cout << "not a number" << std::endl;   
    }
    else
    {
        std::cout << "number: " << i << std::endl;  
    }
 
    return 0;
}
1
Evg
Эксперт CАвтор FAQ
18921 / 6881 / 504
Регистрация: 30.03.2009
Сообщений: 19,379
Записей в блоге: 30
28.12.2013, 23:47 #7
Единственный надёжный способ - прочитать все данные в строковой буфер и потом его проанализровать
http://www.cyberforum.ru/blogs/42536/blog278.html

Добавлено через 1 минуту
Tulosba, пример работы твоей программы:

Код
$ ./a.exe
34872637475643756348753476598347
number: 2147483647
1
Tulosba
:)
Эксперт С++
4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
28.12.2013, 23:50 #8
Evg, переполнение это уже совсем другая история.
1
Evg
Эксперт CАвтор FAQ
18921 / 6881 / 504
Регистрация: 30.03.2009
Сообщений: 19,379
Записей в блоге: 30
28.12.2013, 23:55 #9
Цитата Сообщение от Tulosba Посмотреть сообщение
Evg, переполнение это уже совсем другая история.
Просто я воспринимаю вопрос ТС'а как пожелание сделать программу с нормальным вводом. Хотя может он хотел узнать только то, о чём спросил
1
Van111
211 / 190 / 4
Регистрация: 03.08.2011
Сообщений: 2,630
Записей в блоге: 12
29.12.2013, 12:19  [ТС] #10
всем большое спасибо
0
29.12.2013, 12:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2013, 12:19
Привет! Вот еще темы с ответами:

Проверка типа матрицы - C++
Как проверить, что матрица является верхнетреугольной. Не могу придумать алгоритм. Подскажите с чего начать? Добавлено через 32...

Проверка типа вводимой переменной - C++
Сабж. Консольный режим. Возможно ли это вообще? Преобразование типов канечн рулезная вещь. Вот в таком кусочке: cout &lt;&lt;...

Проверка типа вводимых данных. - C++
Собственно,как осуществить ? К примеру,здесь: int main() { int x; int y; cin &gt;&gt; x;

Проверка типа переменной на этапе компиляции - C++
Добрый день. Прошу экспертов( ну или всех, кто это знает ) показать, как правильно &quot;повешать&quot; проверку времени компиляции на то, был ли...


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

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

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