我的peek功能代码不起作用?这是为什么?任何人都可以用我的窥视功能来帮助我吗?
#include<stdio.h>
#include<stdlib.h>
#define maxsize 10
int stack[maxsize];
int stacktop=0;
void instructions();
int process();
int push(int value);
int pop();
void display();
void peek();
int main()
{
process();
getch();
}
int process()
{
int val;
int choice;
do
{
instructions();
printf("Enter Your Choice: ");
scanf("%d",&choice);
switch( choice )
{
case 1:
printf("\nElement to be Pushed : ");
scanf("%d",&val);
push(val);
break;
case 2:
val=pop();
if(val!=-1)
{
printf("Popped Element : %d\n",val);
}
break;
case 3:
peek();
break;
case 4:
display();
break;
case 5:
break;
}
}while(choice !=5);
}
void instructions()
{
printf("Enter Your choice for the following process\n");
printf("\n[1]Push a Node on top of the list");
printf("\n[2]Pop a node off the list");
printf("\n[3]Peek The Top Node");
printf("\n[4]Display The Whole list");
printf("\n[5]Exit The Program\n");
}
int push(int val)
{
if(stacktop<maxsize)
{
stack[stacktop++]=val;
}
else
{
printf("Stack is full");
}
}
int pop()
{
int a;
if(stacktop>0)
{
a=stack[--stacktop];
return a;
}
}
void display()
{
int i;
i = 0;
if(stacktop>0)
{
printf("Elements are:");
while(i<stacktop)
{
printf("\n%d--\n",stack[i++]);
}
}
}
void peek()
{
printf("%d",stacktop);
}
答案 0 :(得分:2)
它应该是:
printf("%d\n", stack[stacktop - 1]);
打印内容,而不是堆栈的大小?
显然你还需要检查以确保你没有在堆栈范围之外打印(当它是空的时候)
答案 1 :(得分:2)
我知道这不是Code Review,但我想我会给你一些建议。
致电scanf
时,请务必检查结果。例如,如果用户输入十进制数以外的内容,则代码最终会将不确定的值放入choice
或val
变量中。 scanf
函数返回已成功读取的项目数。如果您要求一个项目,scanf
返回1,那么您可以依赖该对象的值:
int choice;
if (scanf("%d", &choice) != 1)
// handle error, can't rely on value of "choice"
else
// continue onwards, can rely on value of "choice"
通常,\n
转义位于字符串文字的末尾,而不是开头。以这种方式这样做更为常见,但这并不意味着它应该总是在最后。
printf("Enter Your choice for the following process\n\n");
printf("[1]Push a Node on top of the list\n");
printf("[2]Pop a node off the list\n");
printf("[3]Peek The Top Node\n");
要输出简单字符串,请考虑使用puts
函数,该函数会自动为您添加换行符:
puts("Enter Your choice for the following process");
puts("");
puts("[1]Push a Node on top of the list");
puts("[2]Pop a node off the list");
puts("[3]Peek The Top Node");
您的display
方法是何时使用for
循环而不是while
循环的完美示例。一般来说,当您确切知道自己拥有多少项并希望迭代它们时,请使用for
循环:
void display()
{
int i;
puts("Elements are:");
for (i = 0; i < stacktop; i++)
printf("\n%d--\n", stack[i]);
}
要反转堆栈的顺序,只需从顶部开始然后向后退:
void display()
{
int i;
puts("Elements are:");
for (i = stacktop - 1; i >= 0; i--)
printf("\n%d--\n", stack[i]);
}