我已经让我的朋友帮我弄清楚问题出在哪里但是没有用。 我正在使用单独的header.h,function.c和main.c 有太多错误,我不能在这里输入所有错误。
所以这是代码,我希望有人可以帮助我,因为我将把这个程序用于我的最终项目 header.h:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define T_anak 200000
#define T_kes 1000000
#define T_makan 20000
struct date {
int hari,bulan,tahun;
};
struct pegawai
{
int nip,jum_anak,jum_kk, gol;
char nama[30];
struct date lahir;
};
void fungsiInputpegawai();
fucntion.c:
#include "header.h"
void fungsiInputpegawai()
{
struct pegawai data;
printf("Silakan Masukan data Pegawai\n");
printf("-> Nama : ");
fgets(data.nama, sizeof data.nama, stdin);
printf("-> NIP : ");
scanf("%d",&data.nip);
printf("-> Golongan : ");
scanf("%d",&data.gol);
printf("-> Jumlah Anggota Keluarga : ");
scanf("%d",&data.jum_kk);
printf("-> Jumlah Anak : ");
scanf("%d",&data.jum_anak);
scanf("-> Masukan Tanggal Lahir (dd-mm-yyyy) : ");
scanf("%d-%d-%d",&data.lahir.hari,
&data.lahir.bulan,
&data.lahir.tahun);
FILE*fp;
fp=fopen("Data_pegawai.txt","a");
fprintf(fp,"\nNama Pegawai : %s\n",data.nama);
fprintf(fp,"NIP : %d\n",data.nip);
fprintf(fp, "Golongan : %d\n",data.gol);
fprintf(fp,"Jumlah Anggota Keluarga : %d\n",data.jum_kk);
fprintf(fp,"Jumlah Anak : %d\n",data.jum_anak);
fprintf(fp,"Tanggal Lahir : %d-%d-%d\n",data.lahir.hari,data.lahir.bulan,data.lahir.tahun);
fclose(fp);
}
main.c:
#include "header.h"
#include "fungsi.c"
int main (void){
fungsiInputpegawai();
return(0);
}
感谢您的帮助。
答案 0 :(得分:3)
您已多次header.h
包含没有包含警示的内容。
您首先将其包含在fungsi.c
中。然后,您将其添加到main.c
,其中还包含fungsi.c
。因此,header.h
中的所有内容都会出现两次,从而导致多个定义错误。
将包含警戒放入标题中,如下所示:
#ifndef HEADER_H
#define HEADER_H
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define T_anak 200000
#define T_kes 1000000
#define T_makan 20000
struct date {
int hari,bulan,tahun;
};
struct pegawai
{
int nip,jum_anak,jum_kk, gol;
char nama[30];
struct date lahir;
};
void fungsiInputpegawai();
#endif
首次遇到此包含文件时,它会定义HEADER_H
宏,并包含该文件的内容。然后,如果第二次包含它,#ifndef HEADER_H
的计算结果为false,那么文件的其余部分(即结构定义,变量和函数声明等)不会被处理,并且您没有重复的定义。
另外,将一个.c文件包含在另一个文件中是不好的做法。你应该做的是分别编译main.c和fungsi.c,然后链接它们。
所以从main.c中删除#include "fungsi.c"
并编译如下:
gcc -c -Wall -Wextra fungsi.c
gcc -c -Wall -Wextra main.c
gcc -Wall -Wextra -o my_program main.o fungsi.o