Написал простую программу вычисления времени загрузки файла. Смущают инструкции
goto
. Чем их можно заменить? Они уместны?
//time_download.c вычисляет время загрузки файлов
#include<stdio.h>
#define bits 8/*количество битов в байте*/
#define PER_IN_SEC 60/*значение секунд в минуте*/
int main(void)
{
int a, b;//цельночислительные переменные
float size, time, speed;//вещественные переменные
printf("Enter file size in megabyts and download speed in megabits:");
scanf_s("%f %f", &size, &speed);//ввод значений "размер" и "скорость"
mark:while (size > 0.00&&speed>0.00)/*цикл проверки ввода. Метка mark для goto в 25 строке*/
{
size = size*bits;//преобразование мегабайт в мегабиты
time = size / speed;//вычисление времени загрузки
size = size / bits;//обратное преобразование мегабит в мегабайты
if (time < 60.00)//проверка результата на временной диапазон
{
printf("File size %.2f megabytes will be loaded at speed"
" %.2f megabits\nin sec behind %.2f seconds\n", size, speed, time);
printf("Enter new data or press 0 for exit\n");
scanf_s("%f", &size);//ввод нового значения
while (size <=0)//проверка ввода
goto check;//в случае неудачи, переход по метке check на 40 строку
scanf_s("%f", &speed); goto mark;//в случае успеха, переход по метке(строка 11 на проверку ввода
}
else//если значение time больше 60 секунд
{
a = time / PER_IN_SEC;//вычисление количества минут
b = (int)time%PER_IN_SEC;//преобразование float в int для деления по модулю
}
printf("File size %.2f megabytes will be loaded at speed"
" %.2f megabits\nin sec behind %d minuts and %d seconds\n", size, speed, a, b);
printf("Enter new data or press 0 for exit\n");
scanf_s("%f", &size);//ввод новых значений
while (size <= 0)//проверка ввода
goto check;//переход на 39 строчку для выхода
scanf_s("%f", &speed); goto mark;//в случае успеха, переход на строку 11 для проверки значения speed
}
check:return 0;
}