Функция записи из структуры в массив - Error: void value not ignored as it ought to be - C (СИ)
Формулировка задачи:
И вроде бы все хорошо, да вот только с функцией toArray (функция из структуры записывает данные в массив) приходится попариться. Компилятор ругается следующим образом: error: void value not ignored as it ought to be
Впервые встречаю данную ошибку(похожие случаи на форуме не помоги разобраться) На всякий случай скинул весь код, хотя может быть и самой функции было бы достаточно. Люди добрые, помогите кто сможет, плиз.
#include<stdio.h>
#include<stdlib.h>
typedef struct Node {
int value;
struct Node *next;
} Node;
Node *head = NULL;
void push(Node **head, int data) {
Node *tmp = (Node*) malloc(sizeof(Node));
tmp->value = data;
tmp->next = (*head);
(*head) = tmp;
}
void fromArray(Node **head, int *arr, size_t size) {
size_t i = size - 1;
if (arr == NULL || size == 0) {
return;
}
do {
push(head, arr[i]);
} while(i--!=0);
}
void printLinkedList(const Node *head) {
while (head) {
printf("%d ", head->value);
head = head->next;
}
printf("\n");
}
void find(Node *head, int val){
int i=0;
while(head != NULL){
if(head->value == val){
i++;
}
head = head->next;
}
printf("It have been found %d times\n", i);
}
void length(Node *head){
int i=0;
while(head != NULL){
i++;
head = head->next;
}
printf("%d\n",i);
}
void add(Node **head, int val){
Node *tmp = (Node*)malloc(sizeof(Node));
tmp->value = val;
tmp->next = (*head);
(*head) = tmp;
}
int *toArray(Node *head){
int i=0;
int leng = length(head);
int *values = (int*)malloc(leng*sizeof(int));
while(head != NULL){
for(i=0; i<leng; i++){
values[i] = head->value;
head = head->next;
}
}
return values;
}
int main(){
Node *head = NULL;
int arr[] = {7, 9, 1 ,9, 4, 9};
fromArray(&head, arr, 6);
printLinkedList(head);
length(head);
find(head, 9);
add(&head, 6);
length(head);
printLinkedList(head);
return 0;
}Решение задачи: «Функция записи из структуры в массив - Error: void value not ignored as it ought to be»
textual
Листинг программы
int length(Node* head) {
int i = 0;
while (head != NULL) {
i++;
head = head->next;
}
printf("%d\n", i);
return i;
}
Объяснение кода листинга программы
В данном коде реализована функция подсчёта длины односвязного списка. Алгоритм работает следующим образом:
- Инициализируем счётчик элементов списка
iравным 0. - Задаём начальный элемент списка в качестве текущего.
- Пока текущий элемент не равен
NULL, то: — Увеличиваем счётчик на единицу. — Делаемnextтекущего элемента новым текущим элементом. - Выводим значение счётчика на экран.
- Возвращаем значение счётчика в качестве результата работы функции.