读书人

请问大神:行编辑程序错在哪儿找了好

发布时间: 2013-04-21 21:18:07 作者: rapoo

请教大神:行编辑程序错在哪儿,找了好久都没找到。
#define stack_init_size 1000
#include"iostream"
using namespace std;


struct Stack{
char *base;
char *top;
int stacksize;
};
Stack s;

//初始化一个空栈
int initStack(Stack &s)
{
s.base=(char *)malloc(stack_init_size*sizeof(char));
if(!s.base)
return 0;
s.top=s.base;
s.stacksize=stack_init_size;
return 1;
}


//出栈
int Pop(Stack &s,char &e)
{
if(s.top==s.base)
return 0;
e=*--s.top;
return 1;
}


//入栈
int Push(Stack &s,char e)
{
*s.top++=e;
return 1;
}


//清空栈
int ClearStack(Stack &s)
{
s.top=s.base;
return 0;
}


//销毁栈
void destroyStack(Stack &s)
{

free(s.base);
s.top=s.base=NULL;
s.stacksize=0;
}


//判断是否为空
int EmptyStack(Stack s)
{
if(s.top==s.base)
return 1;
return 0;
}


//输出字符
int visit(char e)
{
cout<<e;
return 1;
}

//倒序输出
int StackTraverse(Stack &s,int(* visit)(char))
{
while(s.base<=s.top)
{
visit(*s.base);
s.base++;
}
return 1;
}


//行编辑程序函数
void LineEdit()
{
char c,ch;
initStack(s);
ch=getchar();
while(ch!=EOF){
while(ch!=EOF||ch!='/n')
{
switch(ch){
case '#':Pop(s,c);break;
case '@':ClearStack(s);break;
default:Push(s,ch);break;
}
ch=getchar();
}
while(!EmptyStack(s))
{
char e;
Pop(s,e);
cout<<e;
}
if(ch!=EOF)
ch=getchar();
}
destroyStack(s);
}

//主函数
void main()
{
LineEdit();

}

[解决办法]
行程序无结束符,EOF=-1的,键盘输入不进去的,因为你是使用的getchar()进行输入,所以一次只能读入一个字符。添加一个结束符程序就可以正常运行。。。。
对你写的栈:你既然是动态栈,何必一下子分配那么大空间,如果这样,还不如直接使用静态栈,纯属个人见解,勿喷
[解决办法]
按照lz的程序的话那就是无限输入啊,什么时候能停止啊。

读书人网 >C++

热点推荐