-1
typedef struct Books{
char *autor, *titlu, *isbn;
int anAparitie;
struct Books *next;
}Carte;
Carte *first, *last, *p;
char sir[71];
FILE *f;
int validare() //Date validation
{
int i;
for(i=0 ; i<strlen(p->autor) ; i++)
if(!strchr(" -`",p->autor[i]) && !isalpha(p->autor[i]))
{
printf("\n Error (Autor invalid)");
return 0;
}
for(i=0 ; i<strlen(p->isbn) ; i++)
if(!isdigit(p->isbn[i]))
{
printf("\n Error (ISBN invalid)");
return 0;
}
if(p->anAparitie>=2017)
{
printf("\n Error (An invalid)");
return 0;
}
return 1;
}
void afisareSiSalvareDate() //save and print the list
{
FILE *g;
g = fopen("fis.out","w");
p = first;
while(p != NULL){
printf("%s,%s,%s,%d\n",p->autor,p->titlu,p->isbn,p->anAparitie);
fprintf(g,"%s,%s,%s,%d\n",p->autor,p->titlu,p->isbn,p->anAparitie);
p=p->next;
}
fclose(g);
}
void formareData() //List item creation
{
p = (Carte*)malloc(sizeof(Carte));
if(fgets(sir,70,f)!=NULL){
p->autor = strtok (sir,","); //adding data from sir in my current
p->titlu = strtok (NULL,",");
p->isbn = strtok (NULL,",");
p->anAparitie = atoi(strtok (NULL,";"));
}else{
printf("Eroare in timpul citirii datelor");
exit(-101);
}
}
void formareDate() //Linking the item
{
formareData();
p->next = NULL;
if(last != NULL){
last->next = p;
}else{
first = p;
}
last = p;
if(!validare()){ //Validation calling for items data
printf("\n Te rugam sa reintroduci datele\n");
exit(101);
}
printf("Datele au fost adaugate cu succes\n");
}
私は私のリストに2つの新しい項目を追加したいので、formareDate()を2回、afisareSiSalvareDate()を1回呼び出しています。2つ以上のアイテムを追加しているときにリストが正しく作成されないのはなぜですか?
私の最初の変更理由は分かりませんが、彼は最初のアイテムのみにリンクされています。
fis.in場合:
Modoranu Marius,Am fost aici Vol I,1234567,1998;
Pascalau Dorinel,Viata la Padure,7654321,2005;
fis.outは次のとおりです。
Pascalau Dorinel,,54321,1998
Pascalau Dorinel,Viata la Padure,7654321,2005
問題がありますか?
ありがとうございます!