Эта программа проверяет наличие дубликатов, первый раз она не сообщает мне, что идентификатор уже существует, но в третий раз функция finddata возвращает ноль, и это происходит независимо от того, что она читает (в исходном коде finddata внутри функции while).
Попробовал разные компиляции идентификаторов, изменил тип finddatta (хотя я бы хотел этого избежать) и запустил функцию в другом порядке
typedef struct{
char name[MAXSTRING];
int id;
} structure;
typedef struct node node;
typedef struct list list;
struct node {
structure data;
node* next;
};
struct list {
node* head;
int size;
};
list* list_create(){
list* l=(list*) malloc(sizeof(list));
assert(1);
l->head=malloc(sizeof(node));
l->size=0;
return l;
}
node* finddata(int id,list* l){
node* tmp=l->head;
while(tmp->next!=NULL){
if(tmp->data.id==id){
return tmp;
}
tmp=tmp->next;
}
return NULL;
}
int main(int argc,char *argv[]){
list* l=list_create();
if(argc!=2){
printf("Input Error\n");
}
node* found=(node*)malloc(sizeof(node));
node* st=(node*)malloc(sizeof(node));
if(found==NULL){
printf("Error allocating memory\n");
return 0;
}
printf("Give a name\n");
scanf("%s",st->data.name);
printf("Give id\n");
scanf("%d",&st->data.id);
found=finddata(st->data.id,l);
if(found!=NULL){
printf("This id already exists\n");
}
else{
//Some Code
}
//Some more code
return 0;
}
Я хочу, чтобы найденный не возвращал ноль.