Перевод часов в минуты - C (СИ) (150515)
Формулировка задачи:
Ребят нужна помощь! Есть програ которая переводит время из часов в минуты. Ограничение по цифрам дал. А вот как ограничить по символам не помню помогите кто может.
#include <stdio.h>
#include <math.h>
#include <conio.h>
int main()
{
double time, fractional, integer;
do
{
printf("\nPlease, enter time (hh.mm): ");
scanf_s("%lf", &time);
if (time <=0 || time>24)
{
printf("Invalid Number!");
}
else
{
fractional = modf(time, &integer);
printf("%.lf h %.lf m it's %.lf minutes \n", integer, fractional * 100, integer * 60 + fractional * 100);
}
}
while (time <= 0 || time>24);
_getch();
return 0;
}Решение задачи: «Перевод часов в минуты»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
int check(const char* str) {
return isdigit(str[0])
&& isdigit(str[1])
&& (str[2] == '.')
&& isdigit(str[3])
&& isdigit(str[4]);
}
int main() {
double time, fractional, integer;
char str[6] = {0};
int isOk = 0;
while (!isOk) {
printf("\nPlease, enter time (hh.mm): ");
scanf("%5s", str);
time = atof(str);
if (!check(str) || (time <= 0) || (time > 24)) {
fprintf(stderr, "invalid number ...\n");
}
else {
fractional = modf(time, &integer);
printf("%.lf h %.lf m it's %.lf minutes \n",
integer, fractional * 100,
integer * 60 + fractional * 100);
isOk = 1;
}
}
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
stdio.hдля работы с вводом/выводомstdlib.hдля работы с математикой (функцияatof) и стандартными функциями (функцияscanf)math.hдля работы с математикой (функцияmodf)ctype.hдля работы с функциейisdigit
- Функция проверки входной строки на корректность:
- Функция
checkпринимает на вход указатель на строку (const char* str) - Проверяет, что первый символ строки является цифрой (
isdigit(str[0])) - Проверяет, что второй символ строки является цифрой (
isdigit(str[1])) - Проверяет, что третий символ строки равен точке (
(str[2] == '.') - Проверяет, что четвертый и пятый символы строки являются цифрами (
isdigit(str[3])иisdigit(str[4])) - Возвращает
1, если все условия выполняются, и0в противном случае
- Функция
- Основная функция программы:
- В переменной
timeбудет храниться общее количество часов - В переменной
fractionalбудет храниться дробная часть времени (в минутах) - В переменной
integerбудет храниться целая часть времени (в часах) - В массиве
strбудет храниться строка с введенным временем - Переменная
isOkиспользуется для контроля корректности введенного времени
- В переменной
- Цикл ввода/вывода:
- Программа просит ввести время в формате
hh.mm - С помощью функции
scanfсчитывает строку из стандартного ввода и сохраняет ее в переменнойstr - Преобразует строку в число с плавающей точкой с помощью функции
atofи сохраняет результат в переменнойtime - Проверяет корректность введенного времени с помощью функции
check - Если время некорректно или меньше 0 или больше 24, выводит сообщение об ошибке и завершает цикл
- Если время корректно, преобразует его в минуты с помощью функции
modf - Выводит результат в формате
часы минуты
- Программа просит ввести время в формате
- Ключевые слова и их значения:
h- часы (целая часть времени)m- минуты (дробная часть времени)it's- это (для улучшения читаемости кода)