ここにあるこのプログラムは、正しく印刷されません。入力は次のとおりです。
従業員数は?2
従業員 1 の情報を入力: 月/日/年、年齢、身長、名前: 3/21/34、43、3.4、hdsfgdf
従業員 2 の情報を入力してください: 月/日/年、年齢、身長、名前: 4/44/44、44、6.2、dfgtesas
これは出力です:
従業員 1 の情報: 0/-1081689528/134514548、16564212、0.0、��
従業員 2 の情報: 0/1/14608664、-1217230008、0.0、��������
私の唯一の推測は、配列を正しく設定していないか、データではなくアドレスを出力している可能性があるということです。私はそれを仮定するのは正しいですか?少しでもアドバイスが役に立ちます。どうもありがとう!
私のコードは3つのファイルにあります。
これがメインです:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "list.h"
#include "personal.c"
LIST *start, *end;
int main(void)
{
int i, numEmp;
PERSON person;
start=end=NULL;
printf("How many employees? ");
scanf("%d", &numEmp);
PERSON employees[numEmp];
for (i = 0; i < numEmp; i++)
{
printf("Enter employee %d info: month/day/year, age, height, name:\n", i+1);
scanf("%d/%d/%d,%d,%f,%s", &person.bday.month, &person.bday.day,
&person.bday.year, &person.age, &person.height, person.name);
add(&start, &end, person);
}
for (i = 0; i < numEmp; i++)
{
printf("Employee %d information:\n%d/%d/%d, %d, %.1f, %s\n", i+1, employees[i].bday.month, employees[i].bday.day, employees[i].bday.year, employees[i].age, employees[i].height, employees[i].name);
delete(&start, &end);
}
これは構造のリストです:
#ifndef LIST_H_ /* to prevent re-definitions */
#define LIST_H_ /* that cause errors */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct DATE
{
int month;
int day;
int year;
} DATE;
typedef struct PERSON
{
char name[41];
int age;
float height;
DATE bday;
} PERSON;
typedef struct list
{
PERSON data;
struct list *next;
} LIST;
#endif
そして、これは私のすべてのメソッドがある場所です:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "list.h"
int delete (LIST **head, LIST **tail){
LIST *temp;
if (*head == NULL)
return -1;
PERSON retVal = (*head)->data;
if(*head==*tail){
free(*head);
*head=*tail=NULL;
}
else{
temp=(*head)->next;
free(*head);
*head=temp;
}
//return retVal;
}
void add(LIST **head, LIST **tail, PERSON data){
if(*tail==NULL){
*head=*tail=(LIST *) malloc(sizeof(LIST));
(*head)->data=data;//use arrow when struct is pointer. Use . if have direct access to struct
(*head)->next=NULL;
}
else{
(*tail)->next= (LIST *) malloc(sizeof(LIST));
*tail=(*tail)->next;
(*tail)->data=data;
(*tail)->next=NULL;
}
}