Ошибка - C (СИ) (69627)
Формулировка задачи:
list.c: In function ‘listRemove’:
list.c:116:2: warning: format ‘%g’ expects argument of type ‘double’, but argument 2 has type ‘LIST_TYPE’ [-Wformat=]
printf("Элемент z=%g%+gi удален из списка\n", list->_arr[cur]._data);//
^
list.c:116:2: warning: format ‘%g’ expects a matching ‘double’ argument [-Wformat=]
list.c: In function ‘listPrint’:
list.c:147:3: warning: format ‘%g’ expects argument of type ‘double’, but argument 2 has type ‘LIST_TYPE’ [-Wformat=]
printf("%g%+gi ", list->_arr[cur]._data);
^
list.c:147:3: warning: format ‘%g’ expects a matching ‘double’ argument [-Wformat=]typedef double complex LIST_TYPE;
void listRemove(List *list, const int index)
{
int prev, cur;
if (listEmpty(list))
{
printf("Список пуст\n");
return;
}
else if (index < 0 || index >= list->_size)
{
printf("Ошибка. Позиция не найдена\n");
return;
}
if (index == 0)
{
cur = list->_first;
list->_first = list->_arr[list->_first]._next;
}
else
{
prev = findPrev(list, index);
cur = list->_arr[prev]._next;
list->_arr[prev]._next = list->_arr[cur]._next;
}
printf("Элемент z=%g%+gi удален из списка\n", list->_arr[cur]._data);//
list->_arr[cur]._data = ' ';
list->_arr[cur]._next = list->_hole;
list->_hole = cur;
list->_size--;
}void listPrint(const List *list)
{
int i, cur = list->_first;
if (listEmpty(list))
{
printf("Список пуст\n");
return;
}
for (i = 0; i < list->_size; i++)
{
printf("%g%+gi ", list->_arr[cur]._data);
cur = list->_arr[cur]._next;
}
printf("\n");
}Решение задачи: «Ошибка»
textual
Листинг программы
printf("%g%+gi ", creal(list->_arr[cur]._data), cimag(list->_arr[cur]._data));
Объяснение кода листинга программы
В данном коде используется функция printf для вывода значения комплексного числа в формате научной нотации и его модуля. Список действий:
- Вычисляется значение функции creal, которая возвращает действительную часть комплексного числа. Значение функции присваивается переменной
creal(list->_arr[cur]._data). - Вычисляется значение функции cimag, которая возвращает мнимую часть комплексного числа. Значение функции присваивается переменной
cimag(list->_arr[cur]._data). - Оба значения передаются в функцию printf в качестве аргументов.
- Форматирование вывода осуществляется с помощью спецификаторов формата
%gи%+gi. Первый спецификатор формата%gиспользуется для вывода значения с плавающей точкой в формате научной нотации, а второй спецификатор формата%+giиспользуется для вывода значения с указанием знака. - В качестве разделителя между значениями используется пробел.
- Значения переменных
creal(list->_arr[cur]._data)иcimag(list->_arr[cur]._data)передаются в функцию printf в порядке, указанном в списке действий. Следует отметить, что в данном коде предполагается, что переменныеlistиcurуже были определены и инициализированы до этого фрагмента кода.