Присвоение переменной в операторе IF C - PullRequest
0 голосов
/ 05 ноября 2018

Приведенный ниже код выводит время, необходимое улитке для завершения гонки. Я понимаю, что должен использоваться оператор if, но я изо всех сил пытаюсь найти способ назначить мой окончательный код: TimeMinutes1 + TimeMinutes2 + TimeMinutes3 + TimeMinutes4, TimeSeconds1 + TimeSeconds2 + TimeSeconds3 + TimeSeconds4 переменная, которая может использоваться вместе с оператором IF ?

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char SquirrelName [20]; 
    int TimeMinutes1;
    int TimeMinutes2;
    int TimeMinutes3;
    int TimeMinutes4;
    int TimeSeconds1;
    int TimeSeconds2;
    int TimeSeconds3;
    int TimeSeconds4;
    int TotalSeconds1;
    int TotalSeconds2;
    int TotalSeconds3;
    int TotalSeconds4;

    printf("What is the name of the squirrel? \n");
    scanf("%s", SquirrelName);

    printf("How long did it take to complete the first lap in Seconds? \n");
    scanf("%d", &TotalSeconds1);

    TimeMinutes1 = TotalSeconds1 / 60;
    TimeSeconds1 = TotalSeconds1 % 60;

    printf("Lap 1 finished in %d minutes and %d seconds\n", TimeMinutes1, TimeSeconds1);

    printf("How long did it take to complete the second lap in Seconds? \n");
    scanf("%d", &TotalSeconds2);

    TimeMinutes2 = TotalSeconds2 / 60;
    TimeSeconds2 = TotalSeconds2 % 60;

    printf("Lap 2 finished in %d minutes and %d seconds\n", TimeMinutes2, TimeSeconds2);

    printf("How long did it take to complete the third lap in Seconds? \n");
    scanf("%d", &TotalSeconds3);

    TimeMinutes3 = TotalSeconds3/ 60;
    TimeSeconds3 = TotalSeconds3 % 60;

    printf("Lap 3 finished in %d minutes and %d seconds\n", TimeMinutes3, TimeSeconds3);

    printf("How long did it take to complete the fourth lap in Seconds? \n");
    scanf("%d", &TotalSeconds4);

    TimeMinutes4 = TotalSeconds4 / 60;
    TimeSeconds4 = TotalSeconds4 % 60;

    printf("Lap 4 finished in %d minutes and %d seconds\n", TimeMinutes4, TimeSeconds4);

    printf("The total time it took for the course to complete was %d minutes and %d seconds\n", TimeMinutes1 + TimeMinutes2 + TimeMinutes3 + TimeMinutes4, TimeSeconds1 + TimeSeconds2 + TimeSeconds3 + TimeSeconds4);

    return 0;
}

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Всякий раз, когда есть несколько / много переменных, оканчивающихся цифрой, таких как foo1, foo2, foo3 и т. Д., Это указывает на то, что мы должны использовать массив [и цикл вместо репликации кода] .

Если у нас есть несколько параллельных массивов, которые проиндексированы одной и той же индексной переменной, например:

#define LAPCOUNT    4
int time_tot[LAPCOUNT];
int time_min[LAPCOUNT];
int time_sec[LAPCOUNT];

Это указывает на то, что мы должны создать struct и иметь массив этих структур.

Вот версия вашего кода, которая использует эти идеи:

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int time_tot;
    int time_min;
    int time_sec;
} lap_t;

#define LAPCOUNT    4

int
main(void)
{
    char SquirrelName[20];
    int lapidx;
    lap_t *lap;
    lap_t laplist[LAPCOUNT];
    lap_t laptot;

    printf("What is the name of the squirrel? \n");
    scanf("%s", SquirrelName);

    for (lapidx = 0;  lapidx < LAPCOUNT;  ++lapidx) {
        lap = &laplist[lapidx];

        printf("How long did it take to complete lap %d in Seconds? \n",
            lapidx + 1);

        scanf("%d", &lap->time_tot);

        lap->time_min = lap->time_tot / 60;
        lap->time_sec = lap->time_tot % 60;

        printf("Lap %d finished in %d minutes and %d seconds\n",
             lapidx + 1,lap->time_min, lap->time_sec);
    }

    laptot.time_min = 0;
    laptot.time_sec = 0;
    laptot.time_tot = 0;

    for (lapidx = 0;  lapidx < LAPCOUNT;  ++lapidx) {
        lap = &laplist[lapidx];
        laptot.time_min += lap->time_min;
        laptot.time_sec += lap->time_sec;
        laptot.time_tot += lap->time_tot;
    }

#if 0
    printf("The total time it took for the course to complete was %d minutes and %d seconds\n",
        laptot.time_min,laptot.time_sec);
#else
    laptot.time_min = laptot.time_tot / 60;
    laptot.time_sec = laptot.time_tot / 60;
    printf("The total time it took for the course to complete was %d minutes and %d seconds\n",
        laptot.time_min,laptot.time_sec);
#endif

    return 0;
}

UPDATE:

Спасибо, я определенно посмотрю на это

Это важная концепция для будущего.

Использование массива стало бы более очевидным, если бы количество кругов было больше, скажем, 100 вместо 4 *.

При разработке алгоритма важно задать себе следующий вопрос: Масштабируется ли моё решение [вверх]?

A struct - это форма или запись [базы данных]. Он объединяет все связанные вещи. Форма - это отдельный лист бумаги, на котором есть вся информация по данной теме (например, налоговая форма или кадровый учет).

Рассмотрим простую кадровую запись:

typedef struct {
    char person_name[100];
    char person_street[100];
    char person_city[100];
    char person_state[2];
    char person_telno[10];
    int person_age;
    float person_salary;
} person;

Это похоже на наличие одной страницы на человека, и файл сотрудника содержит все такие страницы.

Без идеи struct нам потребовались бы отдельные папки с файлами для каждого из указанных выше полей записи

Имена:

Smith, John
Jones, Fred
Miller, Mary

Улица:

123 Main St
235 Elm St
63 Oak Ave

Город:

New York
Chicago
Los Angeles

Используя struct, наша организация будет выглядеть примерно так:

Smith, John     123 Main St     New York
Jones, Fred     235 Elm St      Chicago
Miller, Mary    63 Oak Ave      Los Angeles

В этих условиях реального мира, конечно, такая организация данных кажется очевидной. Но при кодировании, особенно для более абстрактных вещей, иногда это может быть затруднено из-за сложности проблемы.

Возможность улучшить / уменьшить код [часто я гарантирую, что используемые структуры данных минимальны и полны], может сделать код простым, чистым и надежным.

Это может случиться даже с опытными программистами. В реальном коммерческом продукте, над которым я работал, я обнаружил, что используются «параллельные массивы». Я реорганизовал код для использования массива нового struct, который я создал. Я сделал это только для упрощения / очистки кода. В ходе этого процесса мне удалось обнаружить и исправить по крайней мере пять ошибок, которые были скрытыми и неочевидными до момента очистки.

0 голосов
/ 05 ноября 2018

Если я правильно понимаю, что вы хотите сделать, это что-то вроде этого:

Если общее время составляет менее 4 минут, отобразится сообщение

Когда вы произносите это по-английски, это облегчает перевод в код. Сначала нам нужно рассчитать общее время. Вы можете сделать это с помощью одного задания:

int total = TotalSeconds1 + TotalSeconds2 + TotalSecond3 + TotalSeconds4;

Теперь мы можем написать оператор if. Один из способов сделать это - преобразовать 4 минуты в секунды, но мне лень делать это вручную, поэтому я пишу это явно в коде:

if (total <= 4 * 60) {
    printf("You qualified!")
}

Конечно, вы можете изменить здесь сообщение в соответствии со своими потребностями.

Несколько предложений:

  1. Используйте значимые имена переменных. По большей части вы делаете это очень хорошо. Мое единственное предложение здесь - использовать lap1, lap2 и т. Д. Вместо TotalSeconds1.

  2. Узнайте о циклах. Я понимаю, что вы новичок в программировании. Если вы еще не узнали о петлях for и while, я уверен, что они появятся в классе. Это отличные инструменты, которые позволяют писать меньше кода для повторяющихся задач.

  3. Узнайте о массивах. В том же ключе, что и в # 2, массивы позволяют хранить списки данных с одной переменной. Всякий раз, когда вы обнаруживаете, что называете переменные с цифрами в конце, вам, скорее всего, следует использовать массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...