#c
#c
Вопрос:
Я получаю бесконечный цикл для программы, показанной ниже, когда я запускаю ее дважды, не вводя ввод в первый раз. Но когда я даю ввод при первом запуске, он работает отлично.
Но если я запускаю его один раз и не даю ввод и не запускаю его повторно, это приводит к бесконечному циклу.
Как я могу решить проблему?
Я использую VS Code.
Исходный код:
/* UNIT CONVERSION
kms to miles
inches to foot
cms to inches
pound to kgs
inches to meters
*/
#include <stdio.h>
int main(int argc, char const *argv[])
{
int x;
float a;
start:
printf("nSelect the type of unit conversion you wantnkms to milestPRESS 1ninches to foottPRESS 2ncms to inchestPRESS 3npound to kgstPRESS 4ninches to meterstPRESS 5nPRESS 0 TO EXITn");
scanf("%d", amp;x);
switch (x)
{
case 0:
goto end;
case 1:
printf("Enter the value in Km to be converted into milesn");
scanf("%f", amp;a);
printf("%f kms is %f milesn", a, 0.621371 * a);
goto start;
case 2:
printf("Enter the value in inches to be converted to footn");
scanf("%f", amp;a);
printf("%f inches is %f feetn", a, 0.0833333 * a);
goto start;
case 3:
printf("Enter the value in cms to be converted to inchesn");
scanf("%f", amp;a);
printf("%f cms is %f inchesn", a, a * 0.393701);
goto start;
case 4:
printf("Enter the value in pound to be converted to kgsn");
scanf("%f", amp;a);
printf("%f pound(s) is equal to %f kgs", a, a * 0.453592);
goto start;
case 5:
printf("Enter the value in inches to be converted to metresn");
scanf("%f", amp;a);
printf("%f inch(es) is equal to %f metre(s)", a, a * 0.0254);
goto start;
default:
printf("You have not entered a valid input :(n");
goto start;
}
end:
printf("You have successfully exited the programn");
return 0;
}
Комментарии:
1. Что, по-вашему, произойдет,
x
если вы не будете сканировать новый ввод в него (и не инициализируете его)?2. И что
scanf()
делать, когда входные данные не соответствуют спецификатору преобразования, над которым он работает?3. да, я решил ее, спасибо, ребята
Ответ №1:
Если вы не вводите никаких входных данных, что, вероятно, означает, что вы просто нажали enter, scanf
произойдет сбой, и x
переменная не будет установлена.
if (scanf("%d", amp;x) != 1) {
x = -1;
}
Это установит x в недопустимое значение, если число не было задано. Код проверяет, что scanf
на самом деле было сделано ровно 1 преобразование.
Всегда проверяйте scanf
количество запрошенных преобразований.
И прекратите использовать goto
. Используйте правильные while
циклы, for
, или do while
.
Комментарии:
1. Спасибо, я решил ее. Если я просто инициализирую x = 0, тогда это сработает, а также я буду использовать циклы while , for и do while.