c使用结构的数据库程序

时间:2015-11-22 21:51:52

标签: c database struct

我在c中创建了一个使用结构显示数据库的程序,我对编程也很陌生,我也知道c ++,我也为c ++编写程序,但我在这两个程序中都有问题。我只会发布c代码。所以程序运行正常,直到我看到没有打印我输入的值,它打印随机值(我猜它是垃圾内存)。我不知道为什么这样做有效:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef struct database{
char dataname[32],date[32];
int  number_employers;
float  profit;
double salary;
}database;
void new_company(database x);
void show_company(database x);

int main()
{
database Tarom,Wizzair;
new_company(Tarom);
system("cls");
new_company(Wizzair);
system("cls");
show_company(Tarom);
show_company(Wizzair);
return 0;
}

void new_company(database x){
printf("Enter company name: ");
scanf("%s",&x.dataname);
printf("\nEnter company date: ");
scanf("%s",&x.date);
printf("\nEnter number of employers:");
scanf("%d",&x.number_employers);
printf("\nEnter the average salary of employers:");
scanf("%f",&x.salary);
printf("\nEnter the company profit(in proccent):");
scanf("%f",&x.profit);
}

void show_company(database y){
printf("Company name:%s\n",y.dataname);
printf("Company date:%s\n",y.date);
printf("Number of employers:%d\n",y.number_employers);
printf("Average salary of employers:%f\n",y.salary);
printf("Company profit:%f\n***************************\n",y.profit);
}

2 个答案:

答案 0 :(得分:-1)

void new_company(database x){

您按值传递了对象,因此该函数获取了本地副本。对函数内部所做对象的任何更改都只影响本地副本,而不影响原始副本。那是你的问题。

在C ++中,对该问题的更正更简单。您只需将函数的签名更改为

即可
void new_company(database& x){

在C中,变化更加困难。在调用者将其传递给函数的对象名称前需要&,并且在函数签名中的名称前需要*,并且需要更改所有{{1}用于访问函数内对象的成员.

答案 1 :(得分:-1)

因为您按值传递数据库对象,所以传入了(未初始化的)字典对象的副本,而这个副本正由新公司更新。传递字典的地址,例如

new_company(&Tarom);

并更改new_company定义以获取指向数据库的指针,如:

void new_company(database* x){