//均已调试通过,编译器为DEV C++
//行编辑程序
#include <stdio.h>
#define Stack_Size 100
#define MAX 500
typedef struct {
char *top;
char *base;
int stacklength;
}Sqstack,*Pstack;
void InitStack(Pstack S)
{
S->base=(char *)malloc( Stack_Size*sizeof(char));
if(!S->base)
exit(1);
S->top=S->base;
S->stacklength=Stack_Size;
}
void Push(Pstack S,char ch)
{
if(S->top-S->base>=Stack_Size)
exit(1);
*(S->top++)=ch;
}
void Pop(Pstack S)
{
if(S->base==S->top)
exit(1);
S->top--;
}
/*int PopGet(Pstack S,char *ch)
{
if(S->base==S->top)
exit(1);
*ch=*(--S->top);
} */
void Clear(Pstack S)
{
S->base=S->top;
}
void Destroy(Pstack S)
{
free(S->base);
S->top=S->base;
}
int main()
{
int i,j;
char ch;
Sqstack S;
char *p; //注意类型
char Array[MAX];
FILE *fp;
InitStack(&S);
printf("please input string:/n");
while((ch=getchar())!='/n') {
switch(ch) {
case'#':Pop(&S);
break;
case'@':Clear(&S);
break;
default:Push(&S,ch);
}
}
for(p=S.base,i=0;p<S.top;p++,i++)
Array[i]=*p;
if((fp=fopen("myfile.txt","ab"))==NULL)
{
printf("Can not open the file!/n");
exit(1);
}
for(j=0; j<i;j++)
fputc(Array[j],fp);
fputc('/n',fp); //在输入完一段数据之后输入一个回车给磁盘文件
Destroy(&S);
fclose(fp); //否则提示:另一个程序正在使用此文件,进程无法访问
return 0;
}