Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2011, 00:51   #1
veter48
Форумчанин
 
Регистрация: 26.07.2010
Сообщений: 150
По умолчанию Си. Проверка вводимых значений.

Как на языке СИ позволить пользователю в консоль вводить только значения совместимые с типом int?
veter48 вне форума Ответить с цитированием
Старый 13.10.2011, 00:59   #2
SteAlzzer
Пользователь
 
Аватар для SteAlzzer
 
Регистрация: 11.10.2011
Сообщений: 60
По умолчанию

ну если считываешь символы через scanf();, то проблем не будет. Подробнее советую почитать в Шилдте
SteAlzzer вне форума Ответить с цитированием
Старый 13.10.2011, 07:06   #3
Fleiks
 
Аватар для Fleiks
 
Регистрация: 12.10.2011
Сообщений: 6
По умолчанию

можешь для удобства написать функцию int vvod_int(void) если проверять не раз будешь в программе. в целом получиться что то типо этого:
Код:
#include <stdio.h>
#include <stdlib.h>
int vvod_int(void);
int main(int argc, char *argv[])
{
  int chislo;
  printf("Vvedite chislo\n");
  chislo=vvod_int();
  printf("Otvet %d\n",chislo);   
  system("PAUSE");	
  return 0;
}
int vvod_int(void)
{
    int input;
    while (scanf("%d",&input)==0)
    {
          printf("Vi vveli ne chislo, poprobyite ewe raz\n");
          while (getchar()!='\n')
          continue;
    }
return input;
}

Последний раз редактировалось Stilet; 13.10.2011 в 07:56.
Fleiks вне форума Ответить с цитированием
Старый 13.10.2011, 10:34   #4
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от SteAlzzer Посмотреть сообщение
ну если считываешь символы через scanf();, то проблем не будет.
Как раз, если использовать scanf(), то проблемы будут
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 13.10.2011, 12:36   #5
veter48
Форумчанин
 
Регистрация: 26.07.2010
Сообщений: 150
По умолчанию

Спасибо, очень помогли
veter48 вне форума Ответить с цитированием
Старый 13.10.2011, 13:04   #6
SteAlzzer
Пользователь
 
Аватар для SteAlzzer
 
Регистрация: 11.10.2011
Сообщений: 60
По умолчанию

Цитата:
Сообщение от Blade Посмотреть сообщение
Как раз, если использовать scanf(), то проблемы будут
Почему? Для него же есть регулярные выражения.
scanf("%d", &number); и будут считываться числа до первого не числа) Исхитриться как-нибудь и считывать только числа.
SteAlzzer вне форума Ответить с цитированием
Старый 13.10.2011, 14:37   #7
Fleiks
 
Аватар для Fleiks
 
Регистрация: 12.10.2011
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Blade Посмотреть сообщение
Как раз, если использовать scanf(), то проблемы будут
Можешь сказать какие проблемы могут быть в моем коде. Просто я только учу Си. Поэтому много чего не знаю, и эта информация будет для меня ценная.
Fleiks вне форума Ответить с цитированием
Старый 13.10.2011, 15:14   #8
Fleiks
 
Аватар для Fleiks
 
Регистрация: 12.10.2011
Сообщений: 6
По умолчанию

Цитата:
Сообщение от SteAlzzer Посмотреть сообщение
Почему? Для него же есть регулярные выражения.
scanf("%d", &number); и будут считываться числа до первого не числа) Исхитриться как-нибудь и считывать только числа.
ну допустим ты вводишь: 123qwerty
то у тебя в number запишется 123, но qwerty так и останется висеть в буфере, и если будет еще один ввод то в него пойдет именно qwerty, а не то что хотел ввести с клавиатуры. А если в программе только один ввод то ошибки не будет, если конечно ты первые цифры ввел, а не символы.
Fleiks вне форума Ответить с цитированием
Старый 13.10.2011, 19:08   #9
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от SteAlzzer Посмотреть сообщение
Почему?
Потому что scanf() не позволяет контролировать переполнение буфера.

Цитата:
Сообщение от SteAlzzer Посмотреть сообщение
Для него же есть регулярные выражения.
Бред.

Цитата:
Сообщение от SteAlzzer Посмотреть сообщение
scanf("%d", &number); и будут считываться числа до первого не числа)
Не верно.

Цитата:
Сообщение от SteAlzzer Посмотреть сообщение
Исхитриться как-нибудь и считывать только числа.
Не понял смысла этого предложения.
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проверка вводимых значений Saken_ Общие вопросы Delphi 8 18.10.2010 10:57
Ограничение вводимых значений для combobox Katunya Общие вопросы Delphi 17 29.01.2010 10:11
Проверка типа вводимых данных ROD Общие вопросы C/C++ 3 19.09.2009 20:22
проверка вводимых значений nik1905 Microsoft Office Excel 7 26.08.2009 17:06
проверка вводимых значений не производится при удалении Air_kplp Microsoft Office Excel 7 29.05.2009 09:01