程序为什么运行2提示停止工作

qq_35350230 2016-06-18 11:11:34
#include<stdio.h>
#include<stdlib.h>
enum BOOL{False,True};
#define max 10
typedef struct dnode /*定义双向链表结构体*/
{int number; /*货物编号*/
char name[max]; /*货物名称*/
int counter; /*货物数量*/
struct dnode *prior,*next; /*定义两指针,分别指向其前驱和后继*/
}dnode,*dpointer;
void Initdnode(dpointer &);
BOOL increasednode(dpointer &,int);
BOOL Findkeyworddnode(dpointer &,char*,int);
BOOL Findorderdnode(dpointer &,int);
BOOL Deletednode(dpointer &,int);
void DnodePrint(dpointer);
int main(){
dpointer d;
BOOL temp;
int num,loc,flag=1;
char j,*ch;

//---------------------程序解说-----------------------
printf("本程序为仓库存储系统。\n");
printf("可以实现按顺序和货物名称查询仓库存储情况,也可以增加或删除货物。\n");
//----------------------------------------------------
Initdnode(d);
DnodePrint(d);
while(flag){
printf("请选择:\n");
printf("1.显示所有货物信息\n");
printf("2.增加新的货物\n");
printf("3.按货物名称查询仓库存储情况\n");
printf("4.按顺序查询仓库存储情况\n");
printf("5.删除已有的货物\n");
printf("6.退出程序\n");
scanf(" %c",&j);
switch(j){
case '1':DnodePrint(d);
break;
case '2':{
printf("请输入货物种类数量。\n");
printf("例如:6\n");
scanf("%d",&loc);
temp=increasednode(d,loc);
if(temp==False)
printf("安置失败!\n");
else printf("安置成功!\n");
DnodePrint(d);
break;
}
case '3':if(d->next=NULL)
printf("该仓库为空!\n");
else{
printf("请输入要查询的货物的名称:\n");
scanf(" %c",&ch);
temp=Findkeyworddnode(d,ch,loc);
if(temp==False)
printf("没有找到该货物的相关信息!\n");
else printf("该货物的信息为:%d \n",loc);
}
break;
case '4':if(d->next=NULL)
printf("该仓库为空!\n");
else{
printf("请输入所要查询的货物的编码:");
scanf("%d",&loc);
temp=Findorderdnode(d,loc);
if(temp==False)
printf("没有找到该货物的相关信息!\n");
else printf("该货物的信息为:%d \n",loc,ch);
}
break;
case '5':printf("请输入所要删除的货物的编码:");
scanf("%d",&loc);
temp=Deletednode(d,loc);
if(temp==False)
printf("删除失败!\n");
else printf("成功删除了一个货物:%c \n",ch);
DnodePrint(d);
break;
default:flag=0;
printf("程序结束,按任意键结束!\n");
}
}
getchar();
return 0;
}
void Initdnode(dpointer &d){
d=(dpointer)malloc(sizeof(dnode));
d->prior=NULL;
d->next=NULL;
}
BOOL increasednode(dpointer &d,int n){
int i;
for(i=n;i>0;--i){
dpointer t;
t=(dpointer)malloc(sizeof(dnode));
if(!t)
{return False;}
else{
t->next=d->next;
t->prior=d;
d->next=t;
printf("请输入货物编号,货物名称和货物数量\n");
printf("例如,3 叶欣 10");
scanf("%d","%s","%d");
return True;}
}
}
BOOL Findkeyworddnode(dpointer &m,char *e,int p){
while((m->name!=e)||(m==NULL))
m=m->next;
if(m->name!=e){
printf("没有查找到相对应的货物!请重新输入!\n");
return False;
}
else{
p=m->number;
printf("已找到相对应的货物!\n");
return True;
}
}
BOOL Findorderdnode(dpointer &m,int e){
while((e!=m->number)&&(m->number<=e))
m=m->next;
if(m->number!=e){
printf("没有查找到相对应的货物!请重新输入!\n");
return False;}
else{
printf("已找到相对应的货物!\n");
return True;
}
}
BOOL Deletednode(dpointer &m,int n){
dnode d;
while((n!=m->number)&&(m->number<=n))
m=m->next;
if(m->number!=n){
printf("没有查找到相对应的货物!请重新输入!\n");
return False;}
else{
printf("已找到相对应的货物!\n");
return True;
}
d.prior->next=d.next;
d.next->prior=d.prior;
}
void DnodePrint(dpointer m){
dpointer q;
q=m->next;
printf("仓库中的所有货物:");
while(q!=NULL){
printf("d","%c","d",q->number,q->name,q->counter);
q=q->next;
}
printf("\n");
}
...全文
99 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灸舞 2016-06-18
  • 打赏
  • 举报
回复
increasednode函数里 scanf("%d","%s","%d");改成scanf("%d%s%d", &t->number, t->name, &t->counter);

#include<stdio.h>
#include<stdlib.h>
enum BOOL{False,True};
#define max 10
typedef struct dnode    /*定义双向链表结构体*/
{int number;      /*货物编号*/
char name[max];  /*货物名称*/
int counter;       /*货物数量*/
struct dnode  *prior,*next;  /*定义两指针,分别指向其前驱和后继*/
}dnode,*dpointer;
void Initdnode(dpointer &);
BOOL increasednode(dpointer &,int);
BOOL Findkeyworddnode(dpointer &,char*,int);
BOOL Findorderdnode(dpointer &,int);
BOOL Deletednode(dpointer &,int);
void DnodePrint(dpointer);
int main(){
	dpointer d;
	BOOL temp;
	int num,loc,flag=1;
	char j,*ch;

	//---------------------程序解说-----------------------
	printf("本程序为仓库存储系统。\n");
	printf("可以实现按顺序和货物名称查询仓库存储情况,也可以增加或删除货物。\n");
	//----------------------------------------------------
	Initdnode(d);
	DnodePrint(d);
	while(flag){
		printf("请选择:\n");
		printf("1.显示所有货物信息\n");
		printf("2.增加新的货物\n");
		printf("3.按货物名称查询仓库存储情况\n");
		printf("4.按顺序查询仓库存储情况\n");
		printf("5.删除已有的货物\n");
		printf("6.退出程序\n");
		scanf(" %c",&j);
		switch(j){
		case '1':DnodePrint(d); 
			break;
		case '2':{
			printf("请输入货物种类数量。\n");
			printf("例如:6\n");
			scanf("%d",&loc);
			temp=increasednode(d,loc);
			if(temp==False)
				printf("安置失败!\n");
			else printf("安置成功!\n");
			DnodePrint(d);
			break;
				 }
		case '3':if(d->next=NULL)
					 printf("该仓库为空!\n");
				 else{
					 printf("请输入要查询的货物的名称:\n");
					 scanf(" %c",&ch);
					 temp=Findkeyworddnode(d,ch,loc);
					 if(temp==False)
						 printf("没有找到该货物的相关信息!\n");
					 else printf("该货物的信息为:%d \n",loc);
				 }
				 break;
		case '4':if(d->next=NULL)
					 printf("该仓库为空!\n");
				 else{
					 printf("请输入所要查询的货物的编码:");
					 scanf("%d",&loc);
					 temp=Findorderdnode(d,loc);
					 if(temp==False)
						 printf("没有找到该货物的相关信息!\n");
					 else printf("该货物的信息为:%d \n",loc,ch);
				 }
				 break;
		case '5':printf("请输入所要删除的货物的编码:");
			scanf("%d",&loc);
			temp=Deletednode(d,loc);
			if(temp==False)
				printf("删除失败!\n");
			else printf("成功删除了一个货物:%c \n",ch);
			DnodePrint(d);
			break;
		default:flag=0;
			printf("程序结束,按任意键结束!\n");
		}
	}
	getchar();
	return 0;
}
void Initdnode(dpointer &d){
	d=(dpointer)malloc(sizeof(dnode));
	d->prior=NULL;
	d->next=NULL;
}
BOOL increasednode(dpointer &d,int n){ 
	int i;
	for(i=n;i>0;--i){
		dpointer t;
		t=(dpointer)malloc(sizeof(dnode));
		if(!t) 
		{return False;} 
		else{
			t->next=d->next;
			t->prior=d;
			d->next=t;
			printf("请输入货物编号,货物名称和货物数量\n"); 
			printf("例如,3 叶欣 10\n");
			scanf("%d%s%d", &t->number, t->name, &t->counter);
			return True;}
	}
}
BOOL Findkeyworddnode(dpointer &m,char *e,int p){
	while((m->name!=e)||(m==NULL))
		m=m->next;
	if(m->name!=e){
		printf("没有查找到相对应的货物!请重新输入!\n");
		return False;
	}
	else{
		p=m->number;
		printf("已找到相对应的货物!\n");
		return True;
	}
}
BOOL Findorderdnode(dpointer &m,int e){
	while((e!=m->number)&&(m->number<=e))
		m=m->next;
	if(m->number!=e){
		printf("没有查找到相对应的货物!请重新输入!\n");
		return False;}
	else{
		printf("已找到相对应的货物!\n");
		return True;
	}
}
BOOL Deletednode(dpointer &m,int n){
	dnode d;
	while((n!=m->number)&&(m->number<=n))
		m=m->next;
	if(m->number!=n){
		printf("没有查找到相对应的货物!请重新输入!\n");
		return False;}
	else{
		printf("已找到相对应的货物!\n");
		return True;
	}
	d.prior->next=d.next;
	d.next->prior=d.prior;
}
void DnodePrint(dpointer m){
	dpointer q;
	q=m->next;
	printf("仓库中的所有货物:");
	while(q!=NULL){
		printf("d","%c","d",q->number,q->name,q->counter);
		q=q->next;
	}
	printf("\n");
}
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
paschen 版主 2016-06-18
  • 打赏
  • 举报
回复
scanf("%d","%s","%d"); scanf后面还要加上接收值的变量地址

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧