2016-12-06 4 views
0

私はすでにどこに問題があるのか​​理解してもらえるように友人に依頼していますが、動作しません。 別のheader.h、function.c、およびmain.cを使用しています エラーが多すぎます。ここにはすべてを入力することはできません。関数と構造体を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

の.cファイルが含まれていませんコンパイラによって報告* *非常に最初のエラーで開始または警告 – Garf365

+1

。それを修正してから、次へ進んでください。 1つの(正しい)修正で複数の診断がクリアされることがあるため、適用する必要がある修正の実際の数は、診断メッセージの数よりも少なくても、多少小さくなることがあります。 –

+0

現在のところ、あなたの質問は広すぎます。プログラムの助けが必要な場合は、問題の性質や再現方法などの*特定の*問題を指定する必要があります。 –

答えて

3

header.hには、ガードなしで複数回含まれています。

まず、fungsi.cに含めます。 main.cに含めると、fungsi.cも含まれます。したがって、header.hのすべてが2回現れ、複数の定義エラーが発生します。次のように

入れがあなたのヘッダーに警備員を含める:

#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と評価され、ファイルの残りの部分(つまり、構造体定義、変数宣言および関数宣言など)は処理されず、重複する定義もありません。

また、1つの.cファイルを別の.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 
+0

正解、良いgccの例。あなたは時間があれば、インクルードガードが何をしているのかを説明することができます。また、あなたが提案するインクルード戦略(例えば、Cファイルを含めないでください;-))に従った単純なプログラムでは、通常は必要ないことも注目に値するでしょう。 –

関連する問題