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

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

Войти
Регистрация
Восстановить пароль
 
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
#1

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

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

как узнать, что пользователь ввёл не число а строку, если от него требовалось первое и запрос проходил через функцию scanf?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6547 / 3967 / 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++
6547 / 3967 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.12.2013, 23:11     scanf проверка вводимого типа #4
Цитата Сообщение от Van111 Посмотреть сообщение
не вариант , потому, что если происходит ошибка ввода, то ни какое значение переменной не присваивается, а следственно как мы будем сверять значение?
сканф - функция, функции могут возвращать значения с помощью return. почитай доку что возвращает scanf
alsav22
5410 / 4806 / 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
:)
Эксперт С++
4383 / 3226 / 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
Эксперт CАвтор FAQ
 Аватар для Evg
17008 / 5413 / 334
Регистрация: 30.03.2009
Сообщений: 14,647
Записей в блоге: 26
28.12.2013, 23:47     scanf проверка вводимого типа #7
Единственный надёжный способ - прочитать все данные в строковой буфер и потом его проанализровать
http://www.cyberforum.ru/blogs/42536/blog278.html

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

Код
$ ./a.exe
34872637475643756348753476598347
number: 2147483647
Tulosba
:)
Эксперт С++
4383 / 3226 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
28.12.2013, 23:50     scanf проверка вводимого типа #8
Evg, переполнение это уже совсем другая история.
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17008 / 5413 / 334
Регистрация: 30.03.2009
Сообщений: 14,647
Записей в блоге: 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 проверка вводимого типа
Еще ссылки по теме:

Проверка правильности ввода для переменной типа short C++
C++ Проверка существования трехугольника с заданными сторонами, и определение его типа
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 проверка вводимого типа
Ответ Создать тему
Опции темы

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