我是靠谱客的博主 真实白开水,最近开发中收集的这篇文章主要介绍c语言夜未眠2——实现撤销和重做,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

撤销和重做

 

一般来说,编辑操作的软件都有撤销和重做的功能。

 

首先要明白,这究竟是怎样的一个功能。那word来说把,我们连续输入三个字,然后可以撤销3次,再可以重做3次,在未输入之前,是不能撤销和重做的。然后你输入了,这时可以撤销了,但仍然不能重做。也就是说,只有你撤销后才可以重做。但是不是你撤销多少次就可以重做多少次呢,这要看是不是紧接着做完撤销就重做。例如,当你撤销三个字之后,你紧接着输入一个字,此时并不能进行重做操作。不会因为你之前撤销过三次就可以重做三次,事实上,当你撤销三次后,确实可以重做三次,但一定是紧接着进行的,而且重做的次数是当前撤销的次数,和之前的撤销次数没有任何关系。在不考虑撤销次数限制的情况下,当前有多少文字就可以撤销多少次。重做和输入都可以增加撤销数,而只有撤销可以增加重做数。但输入时,重做数为0。

 

Ok,明白以上特点后,就可以来实现撤销和重做了。可以看到,后输入的将先撤销,后撤销的将先重做。数据结构就是栈。因此我们可以创建一个最多可以连续撤销100次的栈,名为record[100]。Top为栈顶指针。初始值为-1。接下来就是定义两个变量,分别为undoNum,redoNum。分别表示可撤销次数和重做次数。

 

接下来就是写三个重要的函数,分别为AddRecord(),Undo(),Redo();

 

当我们添加内容时,同时也向栈中添加,调用AddRecord函数,栈顶指针,undoNum都增加。

top = (top >= 99)? 0: ++top;

undoNum = (undoNum >=100) ? 100:++undoNum;

因为一旦有输入,就不可以重做了,因此, 我们可以在这里让redoNum = 0;

 

当undo时,栈顶指针下移,可撤销次数减少。同时重做次数增加。

 

Redo时,undoNum次数又增加,但有一点要注意,如果redoNum= 0写在了AddRecord()里,那么redo时不要调用该函数,否则你不管撤销多少次,你只能重做一次。

 

一个简单的撤销和重做就这样实现了。我现在也是一个初学编程的人。欢迎大家来交流。


我的blog:http://blog.csdn.net/booirror 

我的邮箱:booirror@163.com


 

转载于:https://www.cnblogs.com/booirror/archive/2012/04/22/3604326.html

最后

以上就是真实白开水为你收集整理的c语言夜未眠2——实现撤销和重做的全部内容,希望文章能够帮你解决c语言夜未眠2——实现撤销和重做所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(102)

评论列表共有 0 条评论

立即
投稿
返回
顶部