Программа, которая использует scanf для присвоения времени каждому значению в массиве (C) - PullRequest
0 голосов
/ 10 ноября 2018

Я работаю над заданием для хранения чисел и имен в массиве. Мы должны хранить 4 числа, чтобы представить время в секундах для каждого числа в массиве. Затем он суммируется и выводится для каждого числа в английском предложении - в формате минут и секунд.

Вот что у меня есть, оно очень минимальное, и я даже не уверен, что оно делает то, что должно:

#include <stdio.h>

int main()
{
    int i = 0; 
    int person[8] = { 0 };

    int leg1;
    int leg2;
    int leg3;
    int leg4;

    while (i < 8) {
        printf("Hello, please enter the number of the person.:\n"); 
        scanf("%d", &person[i]); 
        i = i + 1;
    }

    printf("%d ", i);
    return 0;
}

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

Я не уверен, возможно ли назначить каждому числу в коде 4 значения времени с помощью scanf.

Здесь есть ноги, чтобы хранить 4 значения времени, а затем я бы суммировал их, преобразовал в секунды и вывел время для каждого значения в целом. Я просто не знаю, как это сделать для массивов.

edit: не очень-то привык к тому, как редактирование работает на этом, половина того, что я написал, пропала, но это нормально, в большинстве случаев все это было просто слоняться. Вот другой фрагмент кода, который у меня есть, который записывает время и классифицирует время:

#include <stdio.h>

int main()
{
    char name[31]; 
    int leg1;
    int leg2; 
    int leg3;
    int leg4;
    int totalTime;

    printf("Hello, please enter the name of the person.:\n");
    scanf("%30s", &name);

    printf("Now please enter the time of the person for the first leg in seconds.:\n");
    scanf("%d", &leg1); 

    printf("Now please enter the time of the person for the second leg in seconds.:\n"); 
    scanf("%d", &leg2); 

    printf("Now please enter the time of the person for the third leg in seconds.:\n");
    scanf("%d", &leg3); 

    printf("Now please enter the time of the person for the final leg in seconds.:\n");
    scanf("%d", &leg4); 

    totalTime = leg1 + leg2 + leg3 + leg4; 

    int minutes = totalTime / 60;
    int seconds = totalTime % 60; 

    if (minutes < 4)
    {
        printf("\t%30s qualified for the International Tournament with a time of %d minutes and %d seconds", name, minutes, seconds);
    }
    else if (minutes >= 4 && minutes < 12)
    {
        printf("\t%30s qualified for the Natonal Race Meeting with a time of %d minutes and %d seconds", name, minutes, seconds);
    }
    else if (minutes >= 12 && minutes < 30)
    {
        printf("\t%30s qualified for the Beginner's League with a time of %d minutes and %d seconds", name, minutes, seconds);
    }
    else if (minutes >= 30)
    {
        printf("\t%30s did not qualify for any league with a really shit time of %d minutes and %d seconds", name, minutes, seconds);
    }

    return 0;

}

1 Ответ

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

Поскольку вы делаете это для задания и еще не знакомы с struct, вы, вероятно, хотите избежать его использования. Но именно так вы группируете связанную информацию в записи:

struct Racer {
    char name[31]; 
    int leg1;
    int leg2; 
    int leg3;
    int leg4;
};

int main(int argc, char *argv) {
    struct Racer racers[8];
    int i;
    for (i = 0; i < 8; ++i) {
        scanf("%30s", &racers[i].name);
        scanf("%d", &racers[i].leg1);
        /* ... */
    }
    int totalTime = 0;
    for (i = 0; i < 8; ++i) {
        totalTime = totalTime + racers[i].leg1 + /* ... */
        /* ... */
    }
    /* ... */
}

Чтобы избежать использования структур в настоящее время, вы можете просто использовать параллельные массивы. См. Также "Сохранить несколько строк в массиве"

int main(int argc, char *argv) {
    char names[8][31];
    int legs1[8];
    int legs2[8];
    int legs3[8];
    int legs4[8];
    int i;
    for (i = 0; i < 8; ++i) {
        scanf("%30s", &names[i]);
        scanf("%d", &legs1[i]);
        /* ... */
    }
    int totalTime = 0;
    for (i = 0; i < 8; ++i) {
        totalTime = totalTime + legs1[i] + /* ... */
        /* ... */
    }
    /* ... */
}

(Замечание: я упомяну, что эти два подхода не эквивалентны во время выполнения, потому что они по-разному распределяют память. Есть причины, по которым вы можете выбрать отдельные массивы в некоторых случаях ... если вы Собираясь перебирать массивы индивидуально, лучше плотно объединить данные, а не разбивать их на элементы по нескольким записям.)

...