как добавить элементы в переменную типа enum? - PullRequest
1 голос
/ 18 июня 2019

когда код скомпилирован, он не показывает значения, вставленные в переменную enum в структуре

этот код показывает только ввод с клавиатуры 0 или 1

#include<stdio.h>
#define Max_CHARS_NAME 100

struct gps_point{
    double latitude;
    enum latitude_pole {North,South} pole;
    double longitude;
    enum longitude {East,West} dire;
    char location_name[Max_CHARS_NAME];
}g;

int main(){
    char arr[Max_CHARS_NAME];
    int i = 0;

    printf("Enter location\n");
    scanf("%s", &g.location_name);  
    strcpy(arr,g.location_name);

    printf("Enter latitude\n");
    scanf("%lf", &g.latitude);

    printf("Enter latitude pole North - 0, South - 1\n");
    scanf("%d",&g.pole);

    //g.latitude_pole = g.pole;

    printf("Enter longitude dire East - 0, West - 1\n");
    scanf("%d", &g.dire);

    printf("Enter longitude\n");
    scanf("%s", &g.longitude);

    printf("%s is situated at (Latitude : %s %lf , Longitude: %s %lf). \n",arr,g.pole,g.latitude,g.dire,g.longitude);

    return 0;
}

Ответы [ 3 ]

4 голосов
/ 18 июня 2019

См. Пример ниже,

enum week{Mon, Tue, Wed, Thur, Fri, Sat, Sun}; 

int main() 
{ 
    enum week day; 
    day = Wed; 
    printf("%d",day); 
    return 0; 
}  

Здесь мы объявляем переменный день типа недели и назначаем одно (числовое) значение в списке переменной, используя «строку», но это невозможно сделать другим способом.

1 голос
/ 18 июня 2019

Это эквивалентно

enum latitude_pole {
  North = 0,
  South = 1
} pole;

Это определяет переменную pole, возможные значения которой: Север (0) и Юг (1).

Это эквивалентно записи

enum latitude_pole {
  North = 0,
  South
} pole;

, потому что в случае, если вы инициализируете один элемент, следующим будет +1 (предыдущий элемент).

В вашем коде при отсутствии инициализации будет вставлено по умолчанию значение 0 дляпервый член и 1 для второго.

0 голосов
/ 18 июня 2019

Если вы не дадите константе перечисления никаких значений, компилятор сделает это молча.

Первому всегда будет присвоено значение 0, а каждая следующая константа перечисления получит значение предыдущей константы + 1.

В вашем случае {North,South}, North гарантированно равно 0, а South гарантировано равно 1. Тип этих констант перечисления гарантированно на 100% совместим с int.

Если вы ввели только некоторые значения явно, правило, в котором каждая константа, получающая значение предыдущего +1, все еще применимо. Поэтому, если вы сделаете {North,South,East=5,West}, они получат значения 0, 1, 5, 6.

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