новичок: как преобразовать случайное число в число от 1 до 7 - PullRequest
0 голосов
/ 31 октября 2019

Я все еще новичок в мире программирования на Cang, и я хотел бы получить вашу помощь!

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

int main()
{
    int week;

    /* Input week number from user */
    printf("Enter week number(1-7): ");
    scanf("%d", &week);

    switch(week)
    {
        case 1: 
            printf("Monday");
            break;
        case 2: 
            printf("Tuesday");
            break;
        case 3: 
            printf("Wednesday");
            break;
        case 4: 
            printf("Thursday");
            break;
        case 5: 
            printf("Friday");
            break;
        case 6: 
            printf("Saturday");
            break;
        case 7: 
            printf("Sunday");
            break;
        default: 
            printf("Invalid input! Please enter week number between 1-7.");
    }

    return 0;
}

Вот вопрос, который я пытаюсь сделать:

«Напишите программу на C, которая хранит число от пользователя и генерирует целое число от 1 до 7 и отображает название дня недели.»

единственное, чего мне не хватает в настоящее время, это то, что я хочузаставить пользователя ввести случайное число, затем сгенерировать случайное число от 1 до 7

Ответы [ 4 ]

5 голосов
/ 31 октября 2019

Оператор по модулю % может быть тем, что вы ищете. На scanf() ваш пользователь введет пользовательское значение, которое будет храниться внутри week. Затем вам нужно сопоставить это значение с числом от 1 до 7.

Используя week % 7, вы получите значение в диапазоне [0,6], затем добавьте 1, чтобы соответствовать вашему диапазону [1,7].

3 голосов
/ 31 октября 2019

Вот демонстрационная программа, которая показывает, как можно генерировать случайные числа от 1 до 7 включительно.

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

int main(void) 
{
    srand( ( unsigned int )time( NULL ) );
    const int N = 10;

    for ( int i = 0; i < N; i++ )
    {
        int value = rand() % 7 + 1;

        printf( "%d ", value );
    }

    putchar( '\n' );

    return 0;
}

Вывод программы может выглядеть следующим образом:

1 2 7 5 2 4 4 4 1 6 

Или другой пример

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

int main(void) 
{
    enum DayOfWeek 
    { 
        Monday = 1, Tuesday, Wednesday,  Thursday, Friday, Saturday, Sunday
    };      
    srand( ( unsigned int )time( NULL ) );
    const int N = 10;

    for ( int i = 0; i < N; i++ )
    {
        int day_of_week = rand() % 7 + 1;

        switch( day_of_week )
        {
        case Monday: 
            puts( "Monday" );
            break;
        case Tuesday: 
            puts( "Tuesday" );
            break;
        case Wednesday: 
            puts( "Wednesday" );
            break;
        case Thursday: 
            puts( "Thursday" );
            break;
        case Friday: 
            puts( "Friday" );
            break;
        case Saturday: 
            puts( "Saturday" );
            break;
        case Sunday: 
            puts( "Sunday" );
            break;
        }
    }

    putchar( '\n' );

    return 0;
}


    putchar( '\n' );

    return 0;
}

Вывод программы может выглядеть следующим образом:

Monday
Thursday
Saturday
Sunday
Friday
Monday
Friday
Wednesday
Thursday
Wednesday

Программа может выглядеть проще, если ввести массив имен дней.

Например,

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

int main(void) 
{
    const char * month_name[] =
    {
        "", "Monday", "Tuesday", "Wednesday",  "Thursday", "Friday", "Saturday", "Sunday"
    };

    srand( ( unsigned int )time( NULL ) );
    const int N = 10;

    for ( int i = 0; i < N; i++ )
    {
        int day_of_week = rand() % 7 + 1;
        puts( month_name[day_of_week] );        
    }

    putchar( '\n' );

    return 0;
}
2 голосов
/ 31 октября 2019

По сути, исходя из этого, я думаю, вы можете заставить его работать:

int main(void)
{
    int seed = time(0);
    srand(seed);
    int n = rand() % 7 + 1;
    printf("%d", n);
}

Это сгенерирует от 1 до 7, будьте осторожны, если вы планируете использовать его в качестве индекса в некотором массиве, потому что Cиндексирование массивов начинается с 0.

rand with seed не возвращает случайное значение, если функция зациклена объясняет, почему вы должны вызывать srand только один раз в вашем приложении.

1 голос
/ 31 октября 2019

Это просто комментарий, призванный осветить идею, выдвинутую в ответе naccyde. Вы не хотите, чтобы гигантский переключатель решал, что печатать. Используйте массив. например:

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

int main(int argc, char **argv) {
        const char * const days[] = {
                "Sunday",
                "Monday",
                "Tuesday",
                "Wednesday",
                "Thursday",
                "Friday",
                "Saturday"
        };
        int x = argc > 1 ? strtol(argv[1], NULL, 0) : 1;
        if( x < 1 || x > 7 ) {
                fprintf( stderr, "Invalid input: %d.  Must be Integer in [1,7]", x);
                exit(EXIT_FAILURE);
        }
        puts(days[x-1]);
        return EXIT_SUCCESS;
}
...