C语言程序设计现代方法K.N.KING第十章第一道编程题

修改书上的程序(片段):
#define STACK_SIZE 100
int contents[STACK_SIZE];
int top = 0;
void make_empty(void)
{
top = 0;
}
int is_empty(void)
{
return top==0;
}
int is_full(void)
{
return top==STACK_SIZE;
}
void push(int i)
{
if (is full()==STACK_SIZE)
stack_overflow();
else
contents[top++]=i;
}
int pop(void)
{
if (is_empty())
stack_underflow();
else
return contents [--top];
}

使得可以达到如下功能,要求用户输入一串圆括号或花括号,然后指出它们之间的嵌套是否正确:
Enter parenteses and/or braces:((){}{()})
parenteses and/or braces are nested properly
我对书上做了修改后如下,有三个警告,而且我觉得我的方法并不好。

#include
#define STACK_SIZE 100
char contents[STACK_SIZE];
int top = 0;
void make_empty(void)
{
top = 0;
}
int is_empty(void)
{
return top==0;
}
int is_full(void)
{
return top==STACK_SIZE;
}
void push(char i)
{
if (is_full()==STACK_SIZE)
stack_overflow();
else
contents[top++]=i;
}
char pop(void)
{
if (is_empty())
stack_underflow();
else
return contents [--top];
}

int main(void)
{
char ch;
int flag=0,flag1=0;
printf("Enter parenteses and/or braces:");
while(ch=getchar()!='\n'){
if(ch=='(' || ch=='{'){
void put(char ch);
}//压入ch进数组contents中
else if(ch==')' || ch=='}'){//如果输入是右括号的话,弹出栈顶以检测是否和输入的右括号配对
char pop(void);//弹出
if(contents[--top]=='('&&ch==')'||contents[--top]=='{'&&ch=='}')
flag=0;
else
flag++;
}
if(getchar()=='\n')
if(top==0)
flag1=0;
else
flag1++;
}
return 0;
}
警告如下:
D:\c\c\第十章程序结构\chapter10programming1.c(20) : warning C4013: 'stack_overflow' undefined; assuming extern returning int
D:\c\c\第十章程序结构\chapter10programming1.c(27) : warning C4013: 'stack_underflow' undefined; assuming extern returning int
D:\c\c\第十章程序结构\chapter10programming1.c(30) : warning C4715: 'pop' : not all control paths return a value

3个回答

前两个警告就是没有定义函数实现,stack_overflow函数可以直接输出一句话提示栈满了并且exit(1)退出程序,stack_underflow可以输出一句提示空栈并且exit(1)退出程序。
pop函数的警告是因为is_empty()控制块如果为true时没有return 语句,而pop函数是要求返回char类型值的。
另外push函数is_full()函数返回的是0或者1所以不用和STACK_SIZE再次相等判断

警告说的是这个函数'stack_underflow' 没有定义,编译器假设你在外部有定义而且返回值是int。如果没有在外部定义,那么在连接的时候会出错

baidu_30233079
baidu_30233079 如果最终编译连接没有问题,那就是在外部有定义。从程序逻辑功能来看,这个函数的作用是产生栈溢出错误
一年多之前 回复
whyyouhitme_
whyyouhitme_ 但是书上的原文就是没有定义的,我没接触过这个栈溢出函数,不知道它实现什么功能,怎么定义
一年多之前 回复

书上肯定是简单写的,一些简单函数什么的人家就懒得给全了,栈溢出函数你看你就随便写一个,报错啦或者直接终止程序就行了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!

相似问题

1
用结构和枚举,把国际象棋棋盘上的棋子,和格子颜色初始化为开局状态
1
这个最短路径的问题,用C语言怎么解决
2
C语言解决一个关于最短路径的花费的问题,怎么利用C解决
0
使用C语言解决一个集合论的问题,左边的集合出现在右边的元素,谢谢
0
用C语言解决下面一个邻接表方面的算法的问题怎么实现的
0
两个集合的匹配问题,要求第一个集合的都要分配到每个集合,用C语言做
0
在拓扑图上的顶点的计算的一个算法的问题怎么用C语言才能实现的?
0
序列求值的方式的问题,采用数组怎么做数组,这里的问题C语言如何解决?
0
区间线段数组搜索数据结构方面的问题,如何利用C语言进行计算的
0
一个集合的切分和分派的算法,怎么实现,采用C语言编程谢谢
0
猴子摘桃子的问题,如何利用C语言编写程序技术实现这个问题
0
数字分配到集合里面的问题,问有哪些分配方式,采用C语言
0
国际象棋的棋盘的移动方式,如何利用C语言的办法去解决的?
0
N个骑士的问题,方块涂色,采用C语言解决的思路是什么
0
线性表的聚合操作的问题的一个实现的算法,采用C语言的办法如何解决
0
兔子繁殖的数列的问题,运用C语言的技术如何才能解决的?
0
序列三元组的计算的算法问题运用的C语言的编程技术如何结局
0
序列和大数的计算的问题,如何运用C语言计算的呢,具体的思路
0
图形的遍历,猴王问题,采用C语言的办法如何计算的
1
计算最大公共点的两条最小路径的问题,是如何运用C语言的编程技术的