#include<stdio.h>
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>(TOP)
#include<fstream.h>
#define MAX 5
int top = -1;
int stack_arr[MAX];
main()
{
int choice;
while(1)
{
printf("1.Push\n");
printf("2.Pop\n");
printf("3.Display\n");
printf("4.Quit\n");
printf("Enter your choice : ");
scanf("%d",&choice);
switch(choice)
{
case 1 :
push();
break;
case 2:
pop();
break;
case 3:
display();
break;
case 4:
exit(1);
default:
printf("Wrong choice\n");
}/*End of switch*/
}/*End of while*/
}/*End of main()*/
push()
{
int pushed_item;
if(top == (MAX-1))
printf("Stack Overflow\n");
else
{
printf("Enter the item to be pushed in stack : ");
scanf("%d",&pushed_item);
top=top+1;
stack_arr[top] = pushed_item;
}
}/*End of push()*/
pop()
{
if(top == -1)
printf("Stack Underflow\n");
else
{
printf("Popped element is : %d\n",stack_arr[top]);
top=top-1;
}
}/*End of pop()*/
display()
{
int i;
if(top == -1)
printf("Stack is empty\n");
else
{
printf("Stack elements :\n");
for(i = top; i >=0; i--)
printf("%d\n", stack_arr[i] );
}
}/*End of display()*/
答案 0 :(得分:2)
你应该在main:
之前转发声明这些函数void push();
void pop();
void display();
或将实际声明移到main之上。
答案 1 :(得分:0)
在主
之前添加void push();
答案 2 :(得分:0)
如果您告诉我们您正在使用的编译器以及它给您的完全错误消息,那么真的会有所帮助。如果你稍微格式化你的代码也会有所帮助(虽然这个特定的代码片段很小而且很容易阅读)。
所以,这里有几件事情。首先,如果您没有显式地键入函数定义,则假定该函数返回int
(即函数隐式地键入int
)。因此,main
,push
,pop
和display
都被假定为返回int
。这是一种非常古老和皱眉的风格,从C99标准开始就禁止使用IINM。由于push
,pop
和display
不会向调用者返回值,因此应明确键入void
。 main
应明确键入int
(在底部进一步讨论)。
其次,如果编译器在看到函数调用之前没有看到函数声明或定义,那么它将假定函数返回int
。如果稍后使用不同的返回类型定义函数,则可能导致类型不匹配错误,如:
int main(void)
{
...
foo();
...
}
void foo(void) { ... }
当编译器在foo()
中看到对main()
的调用时,它会假定foo()
将返回int
,但后来的定义与该假设相矛盾,因此它发布诊断。
这里的教训是,在调用之前至少应该声明你的函数,如下所示:
int main(void)
{
void push();
void pop();
void display();
...
push();
...
pop();
...
display();
...
}
void push(void) { ... }
void pop(void) { ... }
void display(void) { ... }
并确保声明和定义匹配。就个人而言,我遵循“使用前定义”规则,如下:
void push(void) { ... }
void pop(void) { ... }
void display(void) { ... }
int main(void)
{
...
push();
...
pop();
...
display();
}
这样您就不必担心保持声明和定义同步了。
关于main
的定义:C标准正好为main
定义了两个接口:
int main(void);
int main(int argc, char *argv[]);
单个实现可以为main
定义其他接口;几个像这样添加第三个参数:
int main(int argc, char *argv[], char *env[]);
您对main
的定义必须符合标准中指定的两种形式之一,或者特定编译器的文档中指定的形式之一,或者程序将是未定义的(这可能意味着任何事情,从预期运行,立即崩溃,或运行到完成,但系统处于不良状态,或完全不同的东西)。有几位作者坚持认为,如果你不需要来自main()
的返回值,你可以输入void
,但只有当编译器文档明确地表示时才会这样做它支持void main()
。