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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.08.2010, 23:12   #1
arcer
Пользователь
 
Регистрация: 26.01.2010
Сообщений: 42
По умолчанию Есть ли альтернатива функции ввода scanf()?

Здравствуйте, софорумчане!
всем хороша функция scanf(), вот только у меня стоит такова задача: производить попытку чтения ТОЛЬКО в том случае, если есть текст на входе иначе не пытаться читать вообще.
Вот наглядный пример того, что мне нужно:

indicator=0;
while(1){
scanf("%x",&t);
++indicator;
delay(1000);//задержка 1 сек
}

Получаем: если через 30 сек вводится текст, то indicator тогда принимает значение 1.
Нужно получить: если через 30 сек вводится текст, то indicator тогда принимает значение 30.

Заранее благодарен за помощь!

P.S. пробовал использовать чтение из файла /dev/stdin, но результат тот же. Также пробовал с помощью функций ftell и fseek обнаруживать появление текста, тоже не помогает.
arcer вне форума Ответить с цитированием
Старый 24.08.2010, 00:48   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Не очень понял, что требуется.
Попробую догадаться на основе вот этого:
Цитата:
производить попытку чтения ТОЛЬКО в том случае, если есть текст на входе иначе не пытаться читать вообще
Можно использовать функцию kbhit() из conio.h. Она возвращает не ноль, если была нажата клавиша. Ну а потом уже можно считывать с помощью _cscanf.
Небольшой пример по работе функции:
Код:
#include <conio.h>
#include <windows.h>

int main()
{
 int indicator=0;
 while(!kbhit())  // завершить цикл при нажатии клавиши
 {
  ++indicator;
  Sleep(1000);
 }
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 24.08.2010, 21:41   #3
arcer
Пользователь
 
Регистрация: 26.01.2010
Сообщений: 42
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
Не очень понял, что требуется.
Попробую догадаться на основе вот этого:

Можно использовать функцию kbhit() из conio.h. Она возвращает не ноль, если была нажата клавиша. Ну а потом уже можно считывать с помощью _cscanf.
Небольшой пример по работе функции:
Код:
#include <conio.h>
#include <windows.h>

int main()
{
 int indicator=0;
 while(!kbhit())  // завершить цикл при нажатии клавиши
 {
  ++indicator;
  Sleep(1000);
 }
}
Спасибо, что сумели прочесть мои мысли, как раз это мне и нужно, впредь постараюсь изъясняться более понятно
Но проблема в том, что функция kbhit - борландовская, тобишь код не мультиплатформенный, а я как раз пользуюсь компилятором gcc Есть ли у нее там аналог?
arcer вне форума Ответить с цитированием
Старый 24.08.2010, 22:01   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Ну, простого аналога нет. Кстати, в gcc под винду эта функция присутствует )
Если нужно для линукса, то вот нашел такое вот:
http://www.flipcode.com/archives/_kbhit_for_Linux.shtml
http://www.gamedev.net/community/for...opic_id=266450
Это то, что на первых страницах гугла с яндексом. Можете сами продолжить поиск по запросу "kbhit linux".
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 24.08.2010, 22:29   #5
arcer
Пользователь
 
Регистрация: 26.01.2010
Сообщений: 42
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
Ну, простого аналога нет. Кстати, в gcc под винду эта функция присутствует )
Если нужно для линукса, то вот нашел такое вот:
http://www.flipcode.com/archives/_kbhit_for_Linux.shtml
http://www.gamedev.net/community/for...opic_id=266450
Это то, что на первых страницах гугла с яндексом. Можете сами продолжить поиск по запросу "kbhit linux".
Спасибо, select работает
arcer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы системы ввода/вывода C (stdio.h, printf(), scanf()...) vladislavchick Помощь студентам 2 21.02.2010 13:30
Microsoft eMbedded Visual C++ или "есть ли альтернатива?" Хрюн моржов Visual C++ 10 08.10.2009 00:50
Кто нибудь знает есть ли в GDI+ альтернатива Pen.Mode? juan666777 Мультимедиа в Delphi 4 02.08.2009 19:10
Календарик для ввода дат и счетчик номеров -- есть проблемы gleod Microsoft Office Excel 17 17.07.2009 16:02
Делфи + Автокад, есть ли альтернатива Автокаду? Нужны советы. Казаков Александр Помощь студентам 1 12.04.2009 00:19