Я новичок здесь, и мне нужна помощь. Я хочу узнать, как передать список NULL
в функцию, заполнив его, а затем вернув его в свою основную функцию. НАПРИМЕР:Как передать список в функции в C
#include <cstdio>
typedef struct empNode {
char amka[12];
char first_name[30];
char last_name[30];
int year; //etos proslhpshs
float salary;
int num_of_children;
Child *children;
struct empNode *next;
} empNode;
void load_employees_from_file(empNode **employees);
//===========================================================
int main(void) {
empNode *employees = NULL;
load_employees_from_file(&employees);
while (employees != NULL) {
printf("%s ", employees->amka);
employees = employees->next;
}
}
//===========================================================
void load_employees_from_file(empNode **employees) {
FILE * fp;
int num_of_employees;
int i;
fp = fopen("employees.txt", "r");
if (fp == NULL) {
printf("Something went wrong, try again.\n");
return;
}
// here we read the first line of file to see how employee we have
fscanf(fp, "%d ", &num_of_employees);
while (num_of_employees) {
*employees = (empNode*) malloc(sizeof (empNode));
fscanf(fp, "%s ", (*employees)->amka);
fscanf(fp, "%s ", (*employees)->first_name);
fscanf(fp, "%s ", (*employees)->last_name);
fscanf(fp, "%d ", &(*employees)->year);
fscanf(fp, "%f ", &(*employees)->salary);
fscanf(fp, "%d\n", &(*employees)->num_of_children);
if ((*employees)->num_of_children > 0) {
(*employees)->children = (Child*) malloc(((*employees)->num_of_children) * sizeof (Child));
for (i = 0; i < (*employees)->num_of_children; i++) {
fscanf(fp, "%s ", (*employees)->children[i].fname);
strcpy((*employees)->children[i].lname, (*employees)->last_name);
fscanf(fp, "%d\n", &(*employees)->children[i].year_of_birth);
}
}
(*employees)->next = (empNode*) malloc(sizeof (empNode));
*employees = (*employees)->next;
num_of_employees--;
}
fclose(fp);
}
Я получаю сообщение об ошибке, когда я бег while
в моей main
функции, более конкретно мой сбой программы.
--------------------------------------------- ---------------------- ok let mu выразить это более четко, после исправлений у меня нет проблемы с моим списком в функции, проблема в том, что мой список не могу перейти к моей основной функции. Ярким примером этого это:
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *next;
}node;
void read_int(node **nn);
int main(void)
{
node *nn=NULL;
read_int(&nn);
printf("%d", nn->data);
return 0;
}
void read_int(node **nn)
{
FILE *fp;
fp=fopen("test.txt", "r");
fscanf(fp, "%d", (*nn)->data);
fclose(fp);
}
здесь точно такая же проблема, и более легче understund, то test.txt файлы содержат только номер 2. но я не могу напечатать его в моей основной.
C не имеет типа _list_. Что вы имеете в виду с «NULL list»? – Olaf
@Olaf - 'empNode', очевидно, структура связанных списков (определение включено в исходный код выше). – DaoWen
Вы должны уточнить свой вопрос, включив конкретную ошибку, которую вы наблюдаете, и объясните, что это за ошибка, которую вы не понимаете. – DaoWen