Я получаю значения мусора/мусора в качестве вывода, когда моя программа запущена, и отображаемые данные.Почему это дает нежелательную ценность?
Почему это так?
Может кто-нибудь помочь мне понять, как правильно пройти по указателям, а не получать ненужные значения?
Эта программа посвящена созданию стека переменных 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();
}
'fflush (stdin);' может быть неопределенным поведением –
Если это код C++, то вызов 'main' - это неопределенное поведение. – Caesar
Глобальная переменная, называемая 'top' и параметр функции, называемый' top', является рецептом путаницы. Используйте '-Wshadow', если вы скомпилируете gcc, чтобы предупредить вас о таких проблемах. Если вы не работаете в Windows, 'fflush (stdin)' является неопределенным поведением. –