Как составить список пар на C?

#c #list

#c #Список

Вопрос:

Я хочу удалить повторение в этом коде:

 printf( "%.2f: %sn",  440.00f, "A4" );
printf( "%.2f: %sn",  523.25f, "C5" );
printf( "%.2f: %sn",  880.00f, "A5" );
printf( "%.2f: %sn", 1046.50f, "C6" );
 

Мой план состоит в том, чтобы составить список пар и перебрать его. Возможно ли это и является хорошим решением, или я должен просто создать два массива?

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

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

2. @Mat: Мой вопрос в том, как создать массив пар 🙂

Ответ №1:

Просто создайте массив структур:

 struct pair {
    double num;
    char str[32];
};

struct pair pairs[10] = {
    {440.00f, "A4"},
    {523.25f, "C5"},
    /* ... */
};

/* C99. */
pairs[2] = (struct pair){880.00f, "A5"}; 
pairs[3] = (struct pair){
    .str = "C6",
    .num = 1046.50f
};

for (i = 0; i < sizeof(pairs) / sizeof(pairs[0]); i  )
    printf("%.2f: %sn",  pairs[i].num, pairs[i].str);
 

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

1. В качестве альтернативы, выполните double nums[COUNT] = { ... }; char strs[COUNT][32] = { ... }; for(i = 0; i < COUNT; i ) printf("%.2f: %sn", nums[i], strs[i]);

2. Спасибо! Каков самый аккуратный способ инициализации списка в коде?