Назначение переменной в операторе IF C

Приведенный ниже код выводит время, необходимое улитке, чтобы завершить гонку. Я понимаю, что должен использоваться оператор 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;
}

@ itsme86 сделал эту программу, используя c

Radar 05.11.2018 19:20

Вы можете привести нам пример того, что будет делать оператор if? (И, в частности, что вам нужно сделать, но вы не можете?) Вы можете сохранить их в отдельных переменных, и вы можете добавить минуты * 60 к секундам, если вы хотите, чтобы для тестирования была всего одна секунда (или просто сложите оригинальные TotalSeconds)

Rup 05.11.2018 19:20

Вы можете описать словами, чем хотите заниматься?

Code-Apprentice 05.11.2018 19:22

Обратите внимание, что в существующем виде вы уже можете получить здесь недопустимое количество секунд в общей сумме, например если бы все четыре раза были 45 секунд, вы получите всего 0 минут 180 секунд. Вероятно, вам нужно пересчитать долю минут / секунд от общей суммы, а не просто складывать числа, которые у вас есть.

Rup 05.11.2018 19:22

@Rup Хорошо, оператор if должен отображать, было ли время завершения курса менее 4 минут. В таком случае улитка могла бы участвовать в следующем соревновании.

Radar 05.11.2018 19:24

Тогда я думаю, что проще всего было бы просто сложить TotalSeconds1 + 2 + 3 + 4 и проверить, меньше ли это 4 * 60. Но, как указано выше, вам, вероятно, все равно нужно это сделать, чтобы вы могли распечатать общее время, правильно разделенное на минуты и секунды, и если вы вычислите общее время в минутах и ​​секундах, вы можете вместо этого просто протестировать минуты <4, если оно строго меньше чем четыре минуты.

Rup 05.11.2018 19:26

Вы уже научились писать функции? Если это так, ваш код выиграет от использования некоторых функций, а не от написания почти одного и того же кода 4 раза.

Jonathan Leffler 05.11.2018 19:27

@Rup О да, я вижу, спасибо. Однако при этом, как мне назначить переменные, которые становятся единственной переменной, все минуты и секунды, которые я сложил?

Radar 05.11.2018 19:27

То же, что вы уже сделали? Объявите int RaceTotalSeconds, RaceMinutes, RaceSeconds;, а затем, когда у вас будет время круга, RaceTotalSeconds = TotalSeconds1 + TotalSeconds2 + TotalSeconds3 + TotalSeconds4; RaceMinutes = RaceTotalSeconds / 60; RaceSeconds = RaceTotalSeconds % 60;

Rup 05.11.2018 19:30

@JonathanLeffler Нет, я только что начал программировать.

Radar 05.11.2018 19:30

Да, сложите общее количество секунд и разделите на 60, чтобы получить общее количество минут - будучи целыми числами, полученное значение будет автоматически округлено в меньшую сторону.

Tim Randall 05.11.2018 19:30
totalSeconds = TotalSeconds1 + TotalSeconds2 + TotalSeconds3 + TotalSeconds4; if (totalSeconds < 240) { printf("Snail or Squirrel or whatever qualified!\n"); }
Tormund Giantsbane 05.11.2018 19:30

Если вы не научились писать и использовать функции, которые вы написали, тогда можно (в основном) делать то, что вы сделали. Вы узнали о массивах? Опять же, можно было бы писать меньше кода, если бы вы использовали массивы и циклы вместо того, чтобы писать почти один и тот же код 4 раза. И, опять же, если вы не узнали о них, пусть будет так; они стоят на повестке дня в не очень отдаленном будущем, как и написание и использование функций, отличных от main().

Jonathan Leffler 05.11.2018 19:43

@Rup Спасибо за помощь, код работает отлично

Radar 05.11.2018 19:48

@TormundGiantsbane Спасибо за помощь

Radar 05.11.2018 19:50

@JonathanLeffler Спасибо, я обязательно посмотрю на это подробнее.

Radar 05.11.2018 19:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
16
109
2

Ответы 2

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

If the total time is less than 4 minutes then display a message

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

int total = TotalSeconds1 + TotalSeconds2 + TotalSecond3 + TotalSeconds4;

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

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

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

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

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

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

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

Когда есть несколько / много переменных, оканчивающихся цифрой, например 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;
}

Обновлено:

Thanks I’ll definitely look more into this

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

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

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

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. Я сделал это только для того, чтобы упростить / очистить код. В процессе мне удалось обнаружить и исправить по крайней мере пять ошибок, которые были скрытыми и не были очевидными до очистки.

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

Radar 05.11.2018 20:18

Другие вопросы по теме