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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2009, 22:17   #1
Sailorotec
 
Регистрация: 30.11.2009
Сообщений: 6
По умолчанию Нужна помощь по C, scanf()

Как с помощью этой функции сбросить с клавиатуры всё введённое "вникуда"?

Подробнее: нужно ввести число с клавиатуры с помощью scanf():
Код:
int chislo;
scanf("%d",&chislo);
Но также нужно, чтобы программа не вылетала при некорректном вводе (например, вместо "7" ввели "вфыралыв"):
if (scanf("%d",&chislo) == 0)
{
?????
}
Как сбросить то, что было введено с клавиатуры (потому что если этого не сделать, то "вфыралыв" останется висеть до тех пор, пока не будет как-нибудь считано)?
Желательно непосредственно с использованием scanf(), без добавления новых строковых переменных char*.
Спасибо за помощь!

Последний раз редактировалось Stilet; 02.12.2009 в 08:25.
Sailorotec вне форума Ответить с цитированием
Старый 30.11.2009, 22:23   #2
lennon
Заблокирован
 
Регистрация: 18.11.2007
Сообщений: 254
По умолчанию

Код:
#include <ctype.h>

bool isDigit(const char * str)
{
 int len = strlen(str);
 for (int i=0;i<len;i++) if (!isdigit(str[i])) return false;
 return true;
}

char str [256];
scanf("%s",str);
if (isDigit(str))
{
  int chislo = atoi(str);
}
дальше вам сюда http://www.cyberguru.ru/programming/...aq-page34.html
Цитата:
Желательно непосредственно с использованием scanf(), без добавления новых строковых переменных char*.
Спасибо за помощь!
Тогда непосредственно обратитесь в микросотф и скажите что системные вызовы у них кавно

Последний раз редактировалось lennon; 30.11.2009 в 22:26.
lennon вне форума Ответить с цитированием
Старый 01.12.2009, 20:06   #3
Sailorotec
 
Регистрация: 30.11.2009
Сообщений: 6
По умолчанию

Спасибо, но проблема в следующем:
нужно правильным образом сделать "%d" для считывания небольших чисел (не более 5-значных), а не "%s" (так требует задание), более того, нужно сделать защиту от введения слишком большого числа символов, то есть программа должна работать корректно даже при введении 10000000000 символов с клавиатуры.

Насколько я понял, нужно сделать следующее: считываем первые 5 знаков с помощью %5d. Если считывание удалось, то всё хорошо. А если не удалось, то каким-то образом сбрасываем всё, введённое с терминала и снова ждём ввода.
Sailorotec вне форума Ответить с цитированием
Старый 01.12.2009, 20:12   #4
Kyler16
Новичок
Джуниор
 
Регистрация: 01.12.2009
Сообщений: 2
По умолчанию

Сор за офф топ, нету времени создавать тему...
1)Вводиться трехзначное число. Определить : а) Верно ли, что все его цифры одинаковые? Б) Определить есть ли среди его цифр одинаковые.
2)Найти сумму квадратов всех целых чисел от а до 50 ( значение а вводиться с клавиатуры 0<a<50)
Помогите плиз написать такую вату, уже 5-ый час делаю, еще немного и компу пиздец, подсабите плиз чем можите.Заранее спс.
Kyler16 вне форума Ответить с цитированием
Старый 01.12.2009, 20:54   #5
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Kyler16, уж коли пять часов мучаетесь, так полминуты на создание темы не так уж много. И ругаться не стоит. А стоит приводить свои наработки по программе в отдельной теме.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 01.12.2009, 20:58   #6
Kyler16
Новичок
Джуниор
 
Регистрация: 01.12.2009
Сообщений: 2
По умолчанию

Благодарю...
Kyler16 вне форума Ответить с цитированием
Старый 02.12.2009, 05:42   #7
Sailorotec
 
Регистрация: 30.11.2009
Сообщений: 6
По умолчанию

Помогите мне, пожалуйста(
Sailorotec вне форума Ответить с цитированием
Старый 02.12.2009, 13:04   #8
Sailorotec
 
Регистрация: 30.11.2009
Сообщений: 6
По умолчанию

Правильный ответ: чтобы сбросить строку, набрунную в терминале, нужно написать
scanf("%*s");
Sailorotec вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очень нужна помощь c матрицами, макросами в Excel. Заранее благодарен(поверьте, очень-очень нужна помощь) Farridjan Помощь студентам 1 03.07.2009 12:24
Очень нужна помощь с написанием программы... срочно(буду благодарен за помощь) 5Paladin5 Помощь студентам 3 02.07.2009 09:12
анало гфункции scanf() в ассемблере Areostar Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 29.01.2008 22:58
Нужна помощь Worms Общие вопросы Delphi 2 21.01.2008 11:20