Проверка на корректный ввод времени - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем доброго времени суток. И так нужно проверить на валидный ввод времени(min:sec): Пример 3:04; 15:34; 59:59; Я делаю так:
scanf("%d:%d", &a, &b);
Я не знаю точно, что и в каком случае возвращает scanf, но к примеру на ввод одного числа можно проверить так:
if (scanf("%d", &a) != 1)
{
    printf("***Ошибка!!!***\n");
    return;
}
Следующий код таким же макаром не работает
if (scanf("%d:%d", &a, &b) != 1)
{
    printf("***Ошибка!!!***\n");
    return;
}
Если считывать

scanf("%d:%d", &a, &b);

и вводить не цифры, а символы то все проходит успешно...(( Как же мне проверить то, что человек ввел не буквы а числа?
Или может есть более адекватный и красивый вариант?

scanf("%d:%d", &a, &b);

- этот вариант вообще не правильный так как если я введу к примеру "1:02" то получу в а=1 и в b=2(так как 02 это число 2)

Решение задачи: «Проверка на корректный ввод времени»

textual
Листинг программы
#include <stdio.h>
 
main()
{
unsigned int a,b;
if(scanf("%u:%u", &a, &b)<2)   {
    printf("False input. ");
        return 0;
        }
else
    printf("True input. ");
 
if(a>59 || b>59)
    printf("Invalid data.");
else
    printf("%d:%02d", a, b);
return 0;
}

Объяснение кода листинга программы

  1. Включаем библиотеку stdio.h
  2. Создаем две переменные типа unsigned int - a и b
  3. С помощью функции scanf считываем время в формате часы:минуты и сохраняем его в переменные a и b
  4. Проверяем количество успешно считаных значений (должно быть равно 2)
  5. Если ввод некорректен - выводим сообщение об ошибке False input. и завершаем программу
  6. Если ввод корректен - выводим сообщение True input.
  7. Проверяем, что часы и минуты находятся в диапазоне от 0 до 59
  8. Если данные некорректны - выводим сообщение Invalid data.
  9. Если данные корректны - выводим время в формате часы:минуты, ведущие нули при этом не отображаются
  10. Возвращаем 0, чтобы указать, что программа успешно завершилась

Оцени полезность:

13   голосов , оценка 3.615 из 5
Похожие ответы