当我的程序运行并显示数据时,我将垃圾/垃圾值作为输出。
为什么会这样?
有人可以帮助我理解如何通过指针正确传递而不是获取垃圾值吗?
这个程序是关于struct books
类型变量的堆栈创建。
默认情况下,变量bks
不应该通过指针传递并在b
更改时更改?
bks
仍然存储垃圾值。
这是我的代码:
#include<stdio.h>
#include<stdlib.h>
struct books
{
int yrpub;
char name[100],author[50];
};
int top=-1;
int push(struct books b[],int top,int n)
{
if(top==n-1)
return -1;
else
{
++(top);
printf("Enter books info: \n");
printf("Enter name: ");
gets(b[top].name);
printf("Enter author: ");
gets(b[top].author);
printf("Enter Year of publish: ");
scanf("%d",&b[top].yrpub);
return top;
}
}
void display(struct books b[],int top)
{
int i;
if(top==-1)
printf("No books in the stack...");
for(i=0;i<=top;i++)
{
printf("Details of book %d: \n",i+1);
printf("Name: %s\nAuthor: %s\nYear of publish: %d\n",b[i].name,b[i].author,b[i].yrpub);
}
system("pause");
}
int main()
{
struct books bks[10];
int ch;
system("cls");
printf("Select an option:\n");
printf("1. Push book\n2. Pop book\n3. Peep book\n4. Display all books info\n5. Exit\n");
printf("Enter a choice: ");
scanf("%d",&ch);
fflush(stdin);
switch(ch)
{
case 1:
system("cls");
top=push(bks,top,10);
break;
case 4:
system("cls");
display(bks,top);
break;
case 5: exit(0);
default: printf("\nWrong choice...Please retry.");
long i,j;
for(i=0;i<1000000;i++)
for(j=0;j<100;j++);
}
main();
}
答案 0 :(得分:2)
每次递归调用main()
时,都会创建一个新数组bk
。
您在上一次调用main()
时输入的信息对新信息隐藏。
在这种情况下,放弃人性的神性。使用迭代 - 在这种情况下它更好。
这是你的主要问题;可能还有其他一个或一个错误。
答案 1 :(得分:0)
push:
if(top==n-1)
return -1;
main:
top=push(bks,top,10);
当堆栈完整 时, top
被重置
编辑:
第二个问题是再次调用main
,struct books bks[10]
在下一个main
中重置,它是递归。将bks
声明为全局或使用while
循环而不是递归。
while (1) {
getChoices();
if (exit)
/* exit from here */
process();
}