私はここに新しく、これが私の最初の質問です:
これが私のコードです:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Person{
char *vorname;
char *nachname;
};
typedef struct Person Person;
struct Node{
Person *data;
struct Node *next;
};
typedef struct Node Node;
void addToList(Person *p);
void readFile();
Node *start = NULL;
void readFile(){
FILE *f;
Person *p;
char input[501];
char *line;
f = fopen("persdat.txt", "r");
while(fgets(input, 500, f) != NULL){
line = strtok(input, ";");
strcpy(p->vorname, line);
line = strtok(NULL, ";");
strcpy(p->nachname, line);
printf("%s wurde eingelesen.\n", p->vorname);
addToList(p);
line[0] = '\0';
}
}
void addToList(Person *p){
Node *newNode = malloc(sizeof(Node));
newNode->data = p;
newNode->next = NULL;
if (start == NULL){
start = newNode;
printf("%s wurde in die Liste eingefügt. (1. Stelle)\n", newNode->data->vorname);
}else{
Node *current = start;
int stelle = 2;
while(current->next != NULL){
printf("Liste wird durchlaufen... aktuelle Person: %s\n", current->data->vorname);
current = current->next;
stelle++;
}
current->next = newNode;
printf("%s wurde in die Liste eingefügt (%d. Stelle).\n", newNode->data->vorname, stelle);
}
}
void output(){
Node *current = start;
printf("%s\n", current->data->vorname);
do{
current = current->next;
printf("%s\n", current->data->vorname);
}while (current->next != NULL);
}
int main(int argc, char *argv[]) {
printf("\n");
readFile();
output();
return EXIT_SUCCESS;
}
構造体Person
にはメンバーchar *vorname
とがありchar *nachname
ます。構造体Node
にはメンバーPerson *data
と構造体がありますNode *next
(私は typedef しました)。start は宣言されたリストです。
私が使用しているテキストファイルは次のとおりです。
Daniel;Smith
Florian;Mayne
Michael;Fabour
Manuel;Spoley
Andrea;Bree
Prapot;BumBum
Tobias;Sinkleeser
Nikolaus;Muffed
端末出力:
関数 output() は 8 回Nikolaus
出力されますが、リストに挿入した 8 つの名前を出力すると予想されますが、それはなぜですか?