我的银行项目代码无法正常运行。当我在主要运行(无效部门)时输入分支和部门信息。 并且我显示(无效显示)它们返回垃圾值,我认为这些值不在链表中。 代码块中的代码 以下代码的一部分:
#include<iostream>
#include<conio.h>
#include<cstdio>
#include<string.h>
#include<cstdlib>
#include<malloc.h>
using namespace std;
int code=1100;
int acc=9900;
int loan_no=3300;
int emp=10;
void createmenu();
void depositormenu();
void employee();
void loanmenu();
void operationmenu();
class branch
{
char bname[20];
int bcode;
branch *link;
public:
branch()
{
bcode=code++;
}
void input()
{
fflush(stdin);
cout<<"\nEnter Branch Name: ";
gets(bname);
}
void output()
{
cout<<"\nBranch Name: "<<bname;
cout<<"\tBranch Code: "<<bcode;
}
};
class department
{
char dname[30];
int dcode;
public:
branch *b;
department *link;
department()
{
b=new branch;
}
void input()
{
b->input();
fflush(stdin);
cout<<"Enter Department Code: ";
cin>>dcode;
fflush(stdin);
cout<<"Enter Department Name: ";
gets(dname);
}
void output()
{
b->output();
fflush(stdout);
cout<<"\nDepartment Name: "<<dname;
cout<<"\tDepartment Code: "<<dcode;
}
};
void departments(department **);
void display(department **);
department *start,*p=NULL;
void departments(department **start)
{
department *temp,*r,*temp2;
temp2=*start;
system("cls");
cout<<"\nEnter data for Departments->";
department d;
if(*start==NULL)
{
temp=(department*)malloc(sizeof(department));
d.input();
temp=&d;
temp->link=NULL;
*start=temp;
}
else
{
temp=*start;
while(temp->link!=NULL)
{
temp=temp->link;
}
r=(department*)malloc(sizeof(department));
r->input();
r->link=NULL;
temp->link=r;
}
}
void display(department **start)
{
department *temp;
temp=*start;
fflush(stdout);
if(temp==NULL)
{
cout<<"\nList not created!";
cout<<"\tPress any key to return";
getch();
}
else
{
while(temp)
{
temp->output();
temp=temp->link;
getch();
}
}
}
请帮助。 提前谢谢
答案 0 :(得分:0)
由于我看不到您的输入值和预期输出值,我无法肯定地说。但是,既然您选择使用指针来处理所有事情,那么我看到的一件事就是使用部门函数中的这段代码:
department d;
if(*start==NULL)
{
temp=(department*)malloc(sizeof(department));
d.input();
temp=&d; // you are assigning the address of a local variable to temp,
// and then assigning it to the argument pointer.
temp->link=NULL;
*start=temp;
}
如果将局部变量的地址分配给参数指针,然后从函数外部引用它,则会丢失该数据。
我的建议是将部门的内容分配给起始对象,而不是使用本地指针地址。
这可能是您看到垃圾数据的原因。
我很惊讶编译器没有对此说些什么。