C语言调用自己的.h文件失败。

Python0109

C语言调用自己的.h文件失败。,第1张

inventory.c中调用read_line()函数时,read_line()函数没有定义,也就是没有实现,只有声明.

你贴的第二图里只是read_line()函数的声明,要调用一个函数必须有实现体啊.就是所谓的定义.

所以你必须写出read_line()函数实现体啊.

前段时间学链表做的,刚为你改好代码,记住!!!!——GCC编译通过,其他编译器可能编译错误误!!!!!!!!!!!!!

#include <ctype.h>

#include<stdio.h>

#ifndef READLINE_H

#define READLINE_H

int read_line(char str[],int n)

#endif

int read_line(char str[],int n)

{

int ch,i=0

while(isspace(ch=getchar()))

while(ch!='\n' &&ch !=EOF)

{

if(i<n)

str[i++]=ch

printf("%c",ch)

ch=getchar()}

str[i]='\0'

return i

}

#include <stdio.h>

#include <stdlib.h>

#define NAME_LEN 25

struct part{

int bianhao

char name[26]

int jiage

int shuliang

struct part*next}

struct part *inventory=NULL

struct part *find_part(int number)

{

struct part *p

for(p=inventory

p!=NULL &&number>p->bianhaop=p->next)

if(p != NULL &&number==p->bianhao)

return p

return NULL

}

void insert(void)

{

struct part *cur, *prev, *new_node

new_node=malloc(sizeof(struct part))

if(new_node==NULL)

{

printf("fullcant\n")

return}

printf("请输入商品编号:\n")

scanf("%d",&new_node->bianhao)

for(cur=inventory,prev=NULLcur!=NULL &&new_node->bianhao>cur->bianhaoprev=cur,cur=cur->next)

if(cur!=NULL &&new_node->bianhao==cur->bianhao)

{

printf("part already exists.\n")

free(new_node)

return}

printf("\n请输入商品名称:")

read_line(new_node->name,NAME_LEN)

printf("\n请输入价格:")

scanf("%d",&new_node->jiage)

printf("\n请输入数量:")

scanf("%d",&new_node->shuliang)

new_node->next=cur

if(prev==NULL)

inventory=new_node

else

prev->next=new_node}

void search(void)

{

int number,z,y

struct part *p

printf("请输入编号号: ")

scanf("%d",&number)

p=find_part(number)

if(p!=NULL)

{

printf(":编号%d\n",p->bianhao)

printf("名称: %s\n",p->name)

printf("价格: %d\n",p->jiage)

printf("数量:%d\n",p->shuliang)

printf("确定销售此产品?y ?是就输入1")

scanf("%d",&y)

if(y==1){

printf("请输入出售数量")

scanf("%d",&z)

p->shuliang=p->shuliang-z

printf("出售成功")

}

else

printf("取消销售")

}

else

printf("part not found.\n")

}

void update(void)

{

int number,change,kemu

struct part *p

printf("请输入编号:")

scanf("%d",&number)

p=find_part(number)

if(p!=NULL)

{

printf("\n请输入更改的类别数量和价格1或2:")

scanf("%d",&kemu)

printf("\n请输入更改的数量: ")

scanf("%d",&change)

switch(kemu)

{

case 1:p->shuliang=changebreak

case 2:p->jiage=changebreak

}

}

else

printf("part not found .\n")

}

void print(void)

{

struct part *p

printf("part number part name quantity on hand\n")

for(p=inventoryp!=NULLp=p->next)

printf("%8d,%-25s,%8d,%8d\n",p->bianhao,p->name,p->jiage,p->shuliang)

}

int kk(){

struct part *p

char str[30]

printf("请输入文件路径:")

read_line(str,30)

printf("%s",str)

FILE *fp

if((fp=fopen(str,"a+"))==NULL)

{

printf("notttttttt")

exit(0)

}

for(p=inventoryp!=NULL&&!feof(fp)p=p->next)

if((fwrite(p,sizeof(struct part),1,fp))!=1)

{printf("not")

exit(0)

}

/*fseek(fp,,SEEK_CUR)*/

fclose(fp)

}

int bb()

{

struct part *p

char str[25]

printf("请输入文件路径:")

read_line(str,30)

printf("%s",str)

FILE *fp

if((fp=fopen(str,"r+"))==NULL)

{

printf("notttttttt")

exit(0)

}

for(p=inventoryfp!=NULL&&!feof(fp)p=p->next)

{

p=malloc(sizeof(struct part))

fread(p,sizeof(struct

part),1,fp)

printf("%d\n %s \n%d\n %d \n ",p->bianhao,p->name,p->jiage,p->shuliang

)

}

}

int main(void)

{

char code

for()

{

printf("enter operation code: ")

scanf("%c",&code)

while(getchar()!='\n')

switch(code)

{

case 'i' : insert()break//录入商品信息,名称,价格,数量等

case 's' : search()break//搜索商品,显示信息,是否出售,库存数量会减少

case 'u' : update()break//更改商品价格和库存数量

case 'p' : print()break//打印出全部商品信息

case 'k' : kk()break//保存商品信息!

case 'l' : bb()break//读取上次保存的信息(为避免出错,每次运行程序请先读取信息)

case 'q' : return 0//退出

default: printf("Illegal code\n")

}

printf("\n")

}

}

float inventory

float areaforestcurretyear

float capitalcurretyear

float totalcapital

float areacutcurretyear

float profitcurretyear

长一点没有问题。

也可以用简写,加一个注释表,

比如:cpt_cur_yr=capitalcurretyear

...