使用c

时间:2016-12-06 14:32:49

标签: c

我已经让我的朋友帮我弄清楚问题出在哪里但是没有用。 我正在使用单独的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);
}

感谢您的帮助。

1 个答案:

答案 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