注册 登录
编程论坛 数据结构与算法

链栈 缓冲区输入模拟

善丑恶 发布于 2021-05-18 22:36, 3585 次点击
如下图所示,当我们在DOS命令窗口输入指令或者数据时,
由于不能确保输入的数据完全不出错, 并不采用“每接收一个字符就存入程序变量”的方案,而是建立一个输入数据缓冲区,用于暂存用户输入的数据,当接收回车键后,数据被存入程序变量。
如果用户输入错误,可以使用退格键,删除错误的内容和缓冲区的数据。

现在用栈模拟一个输入缓冲区。规定用户的输入:

1:若是退格符#,从栈顶删去一个元素,即出栈Pop;

2:若是退行符@,将字符栈清空,即clear;

3:若不是#或@,即为有效字符,将该字符入栈,即Push;

重要事项:main()函数中不允许出现对于链栈结点的数据域data和指针域next的直接使用操作。所有功能均通过子函数完成。


输入要求:
输入不定长的任意字符

输出要求:
输出经过处理后最后被写入程序的字符

思路提示:
程序中出现了循环条件while(scanf("%c",&ch)!=EOF)
意思是循环的输入1个字符串,每1个字符都存入变量ch中,当按下回车时代表到了字符串结尾,返回EOF
相当于scanf("%c",&ch); ch!=’\0’

但是!这句无法在windows环境下运行, 如果大家要在VC或VS软件中调试程序, 请把while(scanf("%c",&ch)!=EOF)替换成while((ch=getchar())!=’\n’)










#include <stdio.h>
1

typedef struct node{
    datatype data;
    struct node* next;
}LinkStack;
1


void Traverse(LinkStack *top){
    for(LinkStack *p=top->next;p;p=p->next){
        printf("%c",p->data);
    }
    putchar(10);
}
int main(){
    char ch;
   
    LinkStack *top;
    InitStack(&top);

   
    while(scanf("%c",&ch)!=EOF)  //循环输入若干字符,每个字符存放在ch中,按回车结束输入
    {
1

    }
1

    return 0;
}
0 回复
1