#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct emp {
char *name;
char *forename;
char *job;
char *zipcode;
int id;
struct emp *next;
} t_emp;
//For strdup is not a standard
char *strdup(const char *s){
if(ret)
return ret;
}
t_emp *read_func(FILE *fp){
static const char *delim = " \t\n";
char line[256];
while (fgets(line
, sizeof(line
), fp
)){ char *str
= strtok(line
, delim
); if(!str
|| strcmp(str
, "new_employee") != 0) continue;
t_emp
*emp
= malloc(sizeof(*emp
));//check omitted emp
->name
= strdup
(strtok(NULL
, delim
));//check omitted emp
->forename
= strdup
(strtok(NULL
, delim
)); emp
->job
= strdup
(strtok(NULL
, delim
)); emp
->zipcode
= strdup
(strtok(NULL
, delim
)); emp->next = NULL;
return emp;
}
return NULL;
}
void fill_struct(t_emp *s_emp){
FILE *fp = stdin;
while(NULL!= (s_emp->next = read_func(fp)))
s_emp = s_emp->next;
}
void print_emp(t_emp *s_emp){
while (s_emp != NULL){
printf("******************************\n"); printf("%s %s\n", s_emp
->forename
, s_emp
->name
); printf("position: %s\n", s_emp
->job
); printf("city: %s\n", s_emp
->zipcode
); s_emp = s_emp->next;
}
}
int main(void){
t_emp s_emp = { .next = NULL };//list holder, this is dummy.
fill_struct(&s_emp);
print_emp(s_emp.next);
//release list
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKdHlwZWRlZiBzdHJ1Y3QgZW1wIHsKCWNoYXIgKm5hbWU7CgljaGFyICpmb3JlbmFtZTsKCWNoYXIgKmpvYjsKCWNoYXIgKnppcGNvZGU7CglpbnQgaWQ7CglzdHJ1Y3QgZW1wICpuZXh0Owp9IHRfZW1wOwoKLy9Gb3Igc3RyZHVwIGlzIG5vdCBhIHN0YW5kYXJkCmNoYXIgKnN0cmR1cChjb25zdCBjaGFyICpzKXsKCWNoYXIgKnJldCA9IG1hbGxvYyhzdHJsZW4ocykrMSk7CglpZihyZXQpCgkJc3RyY3B5KHJldCwgcyk7CglyZXR1cm4gcmV0Owp9Cgp0X2VtcCAqcmVhZF9mdW5jKEZJTEUgKmZwKXsKCXN0YXRpYyBjb25zdCBjaGFyICpkZWxpbSA9ICIgXHRcbiI7CgljaGFyIGxpbmVbMjU2XTsKCgl3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmcCkpewoJCWNoYXIgKnN0ciA9IHN0cnRvayhsaW5lLCBkZWxpbSk7CgkJaWYoIXN0ciB8fCBzdHJjbXAoc3RyLCAibmV3X2VtcGxveWVlIikgIT0gMCkKCQkJY29udGludWU7CgkJdF9lbXAgKmVtcCA9IG1hbGxvYyhzaXplb2YoKmVtcCkpOy8vY2hlY2sgb21pdHRlZAoJCWVtcC0+bmFtZSA9IHN0cmR1cChzdHJ0b2soTlVMTCwgZGVsaW0pKTsvL2NoZWNrIG9taXR0ZWQKCQllbXAtPmZvcmVuYW1lID0gc3RyZHVwKHN0cnRvayhOVUxMLCBkZWxpbSkpOwoJCWVtcC0+am9iID0gc3RyZHVwKHN0cnRvayhOVUxMLCBkZWxpbSkpOwoJCWVtcC0+emlwY29kZSA9IHN0cmR1cChzdHJ0b2soTlVMTCwgZGVsaW0pKTsKCQllbXAtPmlkID0gYXRvaShzdHJ0b2soTlVMTCwgZGVsaW0pKTsKCQllbXAtPm5leHQgPSBOVUxMOwoJCXJldHVybiBlbXA7Cgl9CglyZXR1cm4gTlVMTDsKfQoKdm9pZCBmaWxsX3N0cnVjdCh0X2VtcCAqc19lbXApewoJRklMRSAqZnAgPSBzdGRpbjsKCXdoaWxlKE5VTEwhPSAoc19lbXAtPm5leHQgPSByZWFkX2Z1bmMoZnApKSkKCQlzX2VtcCA9IHNfZW1wLT5uZXh0Owp9Cgp2b2lkIHByaW50X2VtcCh0X2VtcCAqc19lbXApewoJd2hpbGUgKHNfZW1wICE9IE5VTEwpewoJCXByaW50ZigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKCQlwcmludGYoIiVzICVzXG4iLCBzX2VtcC0+Zm9yZW5hbWUsIHNfZW1wLT5uYW1lKTsKCQlwcmludGYoInBvc2l0aW9uOiAlc1xuIiwgc19lbXAtPmpvYik7CgkJcHJpbnRmKCJjaXR5OiAlc1xuIiwgc19lbXAtPnppcGNvZGUpOwoJCXNfZW1wID0gc19lbXAtPm5leHQ7Cgl9Cn0KCmludAkgbWFpbih2b2lkKXsKCXRfZW1wIHNfZW1wID0geyAubmV4dCA9IE5VTEwgfTsvL2xpc3QgaG9sZGVyLCB0aGlzIGlzIGR1bW15LgoKCWZpbGxfc3RydWN0KCZzX2VtcCk7CglwcmludF9lbXAoc19lbXAubmV4dCk7CgkvL3JlbGVhc2UgbGlzdAp9
bmV3X2VtcGxveWVlIEhhc3NlbGhvZmYgRGF2aWQgUERHIEYtMTMwMDAgMSAKbmV3X2VtcGxveWVlIEFuZGVyc29uIFBhbWVsYSBERFIgRi0zMTAwMCAyIApuZXdfZW1wbG95ZWUgTGVlTm9saW4gR2VuYSBERFIgRi05NDI3MCAzCm5ld19lbXBsb3llZSBDaGFydmV0IERhdmlkIERQUiBGLTU0MDAwIDQK
new_employee Hasselhoff David PDG F-13000 1
new_employee Anderson Pamela DDR F-31000 2
new_employee LeeNolin Gena DDR F-94270 3
new_employee Charvet David DPR F-54000 4