gpt4 book ai didi

c - 在c中使用函数和结构有很多错误

转载 作者:太空宇宙 更新时间:2023-11-04 06:58:43 25 4
gpt4 key购买 nike

我已经请我的 friend 帮我找出问题所在,但它不起作用。我正在使用单独的 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();

函数.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);
}

主.c:

#include "header.h"
#include "fungsi.c"

int main (void){
fungsiInputpegawai();
return(0);
}

感谢您的帮助。

最佳答案

您多次包含 header.h 而没有包含保护。

您首先将其包含在 fungsi.c 中。然后将其包含在 main.c 中,其中还包含 fungsi.c。所以header.h中的所有内容都出现了两次,导致多次定义错误。

将 include guards 放入您的标题中,如下所示:

#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

关于c - 在c中使用函数和结构有很多错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40997800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com