Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
28.12.2013, 11:22     scanf проверка вводимого типа #1
как узнать, что пользователь ввёл не число а строку, если от него требовалось первое и запрос проходил через функцию scanf?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2013, 11:22     scanf проверка вводимого типа
Посмотрите здесь:

C++ Проверка типа вводимой переменной
C++ Проверка типа
Проверка типа вводимых данных. C++
C++ Проверка типа матрицы
Проверка типа (typeid) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.12.2013, 12:25     scanf проверка вводимого типа #2
проверяй возвращаемое значение scanf
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
28.12.2013, 23:04  [ТС]     scanf проверка вводимого типа #3
Цитата Сообщение от Jupiter Посмотреть сообщение
проверяй возвращаемое значение scanf
не вариант , потому, что если происходит ошибка ввода, то ни какое значение переменной не присваивается, а следственно как мы будем сверять значение? ну допустим переменной можно присвоить экзотическое число -1234321 , навряд ли такое пользователь введёт, но всё таки это же не корректно.
нашёл такое решение, проверка флага в структуре FILE , stdin->_cnt > 1 если больше единицы, то была введена строка, если единица, то была введена цифра.
P.S. забыл сказать условие было такое, что программу нужно писать на СИ поэтому функции потоковых объектов ввода вывода не подходят
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.12.2013, 23:11     scanf проверка вводимого типа #4
Цитата Сообщение от Van111 Посмотреть сообщение
не вариант , потому, что если происходит ошибка ввода, то ни какое значение переменной не присваивается, а следственно как мы будем сверять значение?
сканф - функция, функции могут возвращать значения с помощью return. почитай доку что возвращает scanf
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.12.2013, 23:41     scanf проверка вводимого типа #5
C++
1
2
3
int a;
if (!scanf("%d", &a))
    printf("Error scanf!\n");
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
28.12.2013, 23:45     scanf проверка вводимого типа #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;
}
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16843 / 5264 / 323
Регистрация: 30.03.2009
Сообщений: 14,159
Записей в блоге: 26
28.12.2013, 23:47     scanf проверка вводимого типа #7
Единственный надёжный способ - прочитать все данные в строковой буфер и потом его проанализровать
http://www.cyberforum.ru/blogs/42536/blog278.html

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

Код
$ ./a.exe
34872637475643756348753476598347
number: 2147483647
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
28.12.2013, 23:50     scanf проверка вводимого типа #8
Evg, переполнение это уже совсем другая история.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16843 / 5264 / 323
Регистрация: 30.03.2009
Сообщений: 14,159
Записей в блоге: 26
28.12.2013, 23:55     scanf проверка вводимого типа #9
Цитата Сообщение от Tulosba Посмотреть сообщение
Evg, переполнение это уже совсем другая история.
Просто я воспринимаю вопрос ТС'а как пожелание сделать программу с нормальным вводом. Хотя может он хотел узнать только то, о чём спросил
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2013, 12:19     scanf проверка вводимого типа
Еще ссылки по теме:

C++ Проверка типа данных при вводе
C++ Проверка типа вводимого с клавиатуры элемента
C++ Проверка вводимых данных на соответствие типа

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

Или воспользуйтесь поиском по форуму:
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
29.12.2013, 12:19  [ТС]     scanf проверка вводимого типа #10
всем большое спасибо
Yandex
Объявления
29.12.2013, 12:19     scanf проверка вводимого типа
Ответ Создать тему
Опции темы

Текущее время: 00:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru