Попытка присвоить номера строке

#c

#c

Вопрос:

В этом коде C я пытаюсь присвоить и распечатать числа в соответствии с номером месяца

НАПРИМЕР, ввод = 1, результат = январь.

Я искал в Интернете, кажется, я не могу найти ответ на этот вопрос, я попытался присвоить числа способом {} ,

 {
    1 = "January" ; 
}
  

Что-то вроде приведенного выше, но это не работает, могу ли я узнать, что я сделал здесь неправильно.

Приведенный ниже код решает проблему, но я знаю, что его считают плохим кодом Спасибо!

  #include <stdio.h>
    
    
    int main()
    {
        int y ;
        printf("enter a value :" , y);
        scanf("%d" , amp;y);
        if (y>=1 || y<=12)
        {
            if (y == 1 )
            {printf("January");}
            if (y == 2 )
            {printf("February");}
            if (y == 3 )
            {printf("March");}
            if (y == 4 )
            {printf("April");}
            if (y == 5 )
            {printf("May");}
            if (y == 6 )
            {printf("June");}
            if (y == 7 )
            {printf("July");}
            if (y == 8 )
            {printf("August");}
            if (y == 9 )
            {printf("September");}
            if (y == 10 )
            {printf("October");}
            if (y == 11 )
            {printf("November");}
            if (y == 12 )
            {printf("December");}
            
        }
        
        return 0 ;
    }
  

Комментарии:

1. ?? January = 1; ?? Вы не можете ничего присвоить целочисленному литералу, например 1 , это не l-значение. Если вы хотите создавать константы, почему бы не использовать глобальный enum ? , например enum { January, February, March, April, May, June, July, August, September, October, November, December }; , для создания именованных констант January December со значениями 1 12 . Затем вы можете switch (y) case : January puts ("January"); break; case : February ...

2. Просто в качестве примечания: небезопасно использовать scanf без проверки возвращаемого значения. Смотрите эту страницу для получения дополнительной информации: руководство для начинающих по scanf()

3. Необходимо enum будет начать enum { January = 1, February, ... } , иначе значение, связанное с January , по умолчанию 0 будет равно .

Ответ №1:

Вы могли бы попробовать сохранить их в массиве, подобном этому:

 #include <stdio.h>

const char *months[12] = {
    "January", "February", "March", "April", "May", "June",
    "July", "August", "September", "October", "November", "December"};

int main()
{
    int y;
    printf("enter a value :");
    scanf("%d" , amp;y);
    if (y>=1 amp;amp; y<=12)
    {
        printf("%s", months[y-1]);
    }

    return 0;
}