Как решить эту проблему с бесконечным циклом в программе C, с которой я сталкиваюсь?

#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.