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

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

Войти
Регистрация
Восстановить пароль
 
DiffEreD
1427 / 764 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
#1

Если ввода нет, то продолжать цикл - C++

12.03.2013, 14:51. Просмотров 388. Ответов 4
Метки нет (Все метки)

Возвращаясь к теме таймера, как сделать такое: есть цикл, который постоянно работает и выводит на экран значение таймера. В любой момент времени пользователь может нажать клавишу и выйти из цикла. Но если программа будет ждать ввода пользователя, то цикл будет стоять на месте и следовательно ничего не будет выводится на экран, а если оставить как есть, то программа так и не получит ввода от пользователя. Надо чтоб цикл постоянно работал до нажатия на клавишу ожидая ввода какое то определенное время, если ввода не было, то забыть про запрос на ввод до следующей итерации. Как это можно реализовать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <iomanip>
#include <thread>
#include <chrono>
 
int main()
{
    auto start = std::chrono::high_resolution_clock::now();
    char ch;
    unsigned minutes, seconds, milliseconds;
    while (true)
    {
        milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now()-start).count();
        seconds = milliseconds/1000;
        milliseconds %= 100;
        minutes = seconds/60;
        seconds %= 60;
        std::cout<<std::setw(2)<<minutes<<"."<<std::setw(2)<<seconds<<"."<<std::setw(2)<<milliseconds;
        std::this_thread::sleep_for(std::chrono::milliseconds(10));
        std::system("cls");
        /*if ((std::cin.get(ch) && ch == ' ') || ??) //если ввода нет, то продолжаем цикл while
        {
            std::cout<<"STOP\n";
            std::cin.get();
            break;
        }*/
    }
   std::cout<<"\nTime: "<<std::setw(2)<<minutes<<"."<<std::setw(2)<<seconds<<"."<<std::setw(2)<<milliseconds<<"\n";
   return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2013, 14:51     Если ввода нет, то продолжать цикл
Посмотрите здесь:

Цикл с ожиданием ввода C++
C++ Ввести с клавиатуры фамилию и задать букву на поиск (любую) тогда вывести ее на экран если он есть, а если нет то сообщение что она отсутствует.
Как сделать так, что если файл существует return true, если нет - return false C++
C++ Цикл ввода с условием
C++ Матрицы. Бесконечный цикл. Проверка ввода
C++ Обработка символьных данных. Yes, если есть символ в строке и NO если его нет
C++ Вывести на экран слова, в которых все символы повторяющиеся, или сообщение «Нет», если требуемых слов нет
Цикл и строки, очистка потока ввода C++
C++ Остановить цикл ввода последовательности, если введенное значение равно нулю.
Если в массиве есть хоть 1 отрицательное число, то программа должна печатать max, а если нет - то 0 C++
Вывести решения уравнения, если их число конечно, "NO", если решений нет, и "INF", если их бесконечно много C++
C++ Определить является ли заданное число трёхзначным, если нет, вывести его последнюю цифру, а если да, первую

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4387 / 3230 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
12.03.2013, 15:02     Если ввода нет, то продолжать цикл #2
Помнится была такая функция kbhit() в <conio.h>
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.03.2013, 15:18     Если ввода нет, то продолжать цикл #3
Что-то компилятор на эту строчку ругается:
C++
1
std::this_thread::sleep_for(std::chrono::milliseconds(10));
Пишет: "error: 'std::this_thread' has not been declared"
Чего не хватает?
DiffEreD
1427 / 764 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
12.03.2013, 15:41  [ТС]     Если ввода нет, то продолжать цикл #4
Цитата Сообщение от alsav22 Посмотреть сообщение
Чего не хватает?
std::this_thread походу в заголовке thread объявлен, но без этой строчки тоже должно работать.

Добавлено через 17 минут
Да, kbhit() решила проблему. Но что то я так и не нашел ее подробного описания на cppreference.com и cplusplus.com, она что, такая древняя? Хотелось бы взглянуть на реализацию.
Tulosba
:)
Эксперт С++
4387 / 3230 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
12.03.2013, 15:45     Если ввода нет, то продолжать цикл #5
Цитата Сообщение от yuron_477 Посмотреть сообщение
Хотелось бы взглянуть на реализацию.
Вот здесь реализация через select описана.
Yandex
Объявления
12.03.2013, 15:45     Если ввода нет, то продолжать цикл
Ответ Создать тему
Опции темы

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