-3
我試圖從一個文件(「input.txt」)插入數據到一個隊列,我遇到了麻煩。如何將文件中的數據插入隊列的節點?
input.txt中如下:
2 18.487.548-k Juan Rodriguez 35 m
122 19.658.568-0 Chewbacca Solo 900 m
5 16.658.487-6 John Travolta 45 m
23 10.658.479-5 Perl Diamond 18 f
注: 「空間」 中的數據之間的是選項卡( 「\ t」 的),而不是一個空間。
這是我的數據結構:我使用
/* Person */
typedef struct person {
int attentionNumber;
char id [30];
char firstName [40];
char lastName [40];
int age;
char sex[20];
}Person;
/* Node */
typedef struct node {
Person *person;
struct node *next;
}Node;
/* Queue*/
typedef struct queue {
Node *head;
Node *tail;
int size;
}Queue;
功能:
Queue *createQueue();
Node *createNode(Person *aPerson, Node *ptro);
void insert(Person *aPerson, int attentionNumber, char id [30], char firstName [40], char lastName [40], int age, char sex [20]);
void read();
Node *headNode(Queue *c);
Node *tailNode(Queue *c);
bool emptyQueue(Queue *c);
計劃:
Queue *createQueue()
{
Queue *aQueue;
/* memory for the Queue */
if((aQueue = (Queue *) malloc(sizeof(Queue))))
{
/* Queue initialize empty */
aQueue->size = 0;
/* head and tail pointer -> Null */
aQueue->head = aQueue->tail = NULL;
}
return aQueue;
}
Node *createNode(Person *aPerson, Node *pointer)
{
Node *aNode;
/* memory for the Node */
if((aNode = (Node *) malloc(sizeof(Node))))
{
/* values of Node */
aNode->person = aPerson;
aNode->next = pointer;
}
return aNode;
}
void insert(Person *aPerson, int attentionNumber, char id [30], char firstName [40], char lastName[40], int age, char sex[20])
{
if(aPerson = (Person *) malloc(sizeof(Person)))
{
aPerson->attentionNumber = attentionNumber;
strcpy(aPerson->id, id);
strcpy(aPerson->firstName, firstName);
strcpy(aPerson->lastName, lastName);
aPerson->age = age;
strcpy(aPerson->sex, sex);
}
else
{
printf("Couldn't insert data\n");
exit(0);
}
}
/* first node of Queue */
Node *headNode(Queue *c)
{
return c->head;
}
/* last node of Queue */
Node *tailNode(Queue *c)
{
return c->tail;
}
/* returns true if Queue is empty, false otherwise */
bool emptyQueue(Queue *c)
{
return (c->head == NULL) ? true : false;
}
void read()
{
Queue * C;
C = createQueue();
/* Files to read and write, respectively */
FILE *input;
FILE *output;
/* String to be read */
char data[201];
/* Temp auxiliar Person */
Person tempPerson;
/* Tokenize */
char * token;
/* Open input file */
input = fopen("input.txt" , "r");
/* not sure abour this */
if(input == NULL)
{
printf("Couldn't open file\n");
exit(0);
}
/* Open output file for test */
output = fopen("output.txt" , "w");
/* Read string */
while(fgets(data, 201, input) != NULL)
{
/* Tokenize by "\t" (tab) */
token = strtok(data,"\t");
/* Count */
int count = 0;
while (token != NULL)
{
if(count == 0)
{
tempPerson.attentionNumber = atoi(token);
}
if(count == 1)
{
strcpy(tempPerson.id, token);
}
if(count == 2)
{
strcpy(tempPerson.firstName, token);
}
if(count == 3)
{
strcpy(tempPerson.lastName, token);
}
if(count == 4)
{
tempPerson.age = atoi(token);
}
if(count == 5)
{
strcpy(tempPerson.sex, token);
}
count++;
token = strtok(NULL, "\t");
}
/* Call insert function */
insert(tempPerson, tempPerson.attentionNumber, tempPerson.id, tempPerson.firstName, tempPerson.lastName, tempPerson.age, tempPerson.sex);
/* Write output file for test */
fprintf(output, " %i ", tempPerson.attentionNumber);
fprintf(output, "%s ", tempPerson.id);
fprintf(output, "%s ", tempPerson.firstName);
fprintf(output, "%s ", tempPerson.lastName);
fprintf(output, "%i ", tempPerson.age);
fprintf(output, "%s", tempPerson.sex);
}
/* Close files */
fclose(input);
fclose(output);
}
int main (int argc , char ** argv)
{
/* Call read function */
read();
return 0;
}
錯誤我越來越:
In function ‘read’:
error: incompatible type for argument 1 of ‘insert’
insert(tempPerson, tempPerson.attentionNumber, tempPerson.id, tempPerson.firstName, tempPerson.lastName, tempPerson.age, tempPerson.sex);
^
note: expected ‘struct Person *’ but argument is of type ‘Person’
void insert(Person *aPerson, int attentionNumber, char id [30], char firstName [40], char lastName[40], int age, char sex[20])
我在做什麼錯誤/沒有做?
標準警告:不要投'無效*'/從指針(malloc之類的'()的結果'和朋友)。使用'strcpy'而不需要使用,它會顯示_undefined behaviour_,如果源不適合目的地 - 帳戶的額外終結者。 – Olaf
尋求調試幫助的問題(「爲什麼這個代碼不工作?」)必須包含所需的行爲,特定問題或錯誤以及在問題本身中重現問題所需的最短代碼。沒有明確問題陳述的問題對其他讀者無益。請參閱:如何創建最小,完整和可驗證示例。 – Olaf
這不是教程網站,也不是「寫我的代碼」。有數以千計的實施列表。即使在SO上。 – Olaf