专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > C语言

小弟我的C语言学习历程

发布时间:2011-06-28 16:18:45 文章来源:www.iduyao.cn 采编人员:星星草
我的C语言学习历程

开始学习C语言

你玩过电脑游戏吗?
你喜欢电脑游戏吗?
电脑游戏是你生活中的一部分吗?
小时候,游戏是一台黑白电视机——现实在手柄的这头,梦境在手柄的那头.
有的游戏改变过人的一生……
长大后,游戏是一枚小小的铜币——现实在摇杆的这头,梦境在摇杆的那头。
现在啊,游戏是一台电脑——现实在鼠标这头,梦境在鼠标那头……
当计算机技术给游戏提供了强有力的支持后,一个陌生而又似曾相识的新奇世界展示在人们面前。
这里有逝去的童年梦想,有心头压抑已久的情感;有疯狂、神秘、也有脑力和技巧的挑战;有轻松获得实实在在的知识,也有用“虚拟”成就一个别样的人生。这不是一个神奇的世界吗?下面,我们就用编游戏来学习C语言吧!
总是从HELLO WORLD开始。
学习编程的第一个程序,一般就是打印一个亲切的词语——“Hello,World!”
……
(后面的内容省略)
 
 
透露一下,上面所写的,其实是转载自我的学习机里的“趣味导学”开始部分的内容,我接触C语言也是从这里开始的。
高二时,我有了一部学习机:诺亚舟NP1500,它搭载的系统是嵌入式linux系统,除了学习功能外,还自带了“编程天地”功能,看名字大家应该就能知道,这个是用来编程的。


打开“编程天地”,主菜单里面有个Noah-IDE,之前还不知道IDE是什么,有空百度了一下,原来IDE指的是集成开发环境;

这个Noah-IDE很强大,虽然没有电脑端的那样多的功能,比如:语法高亮、自动缩进、代码格式化。
但是,基本功能还是具备的:可以新建C/C++工程、为工程添加源码文件、支持编辑撤销/重做、跳转到指定行、编译工程时自动生成makefile文件并make之,更想不到的是,还自带了gcc、g++编译器,busybox也有。

闲话不多说,入正题。

之前看“趣味导学”里的示例源码,第一个是HelloWorld!程序,我就照着写了,测试了一下,可以显示Hello World!,之后,上面说要加个getch()函数,按任意键后退出程序,我就改了一下源码,加上头文件:conio.h,printf()后加上getch(),编译之,结果可想而知,无法通过编译,现在我是知道原因的,这个示例源码是适合windows系统的,而学习机是linux系统,与windows系统不同,有些头文件没有。“趣味导学”里面还有两个源码:在屏幕中移动的笑脸,推箱子游戏;两个都试过,由于编译不通过就放弃了。

“编程天地”里还有C语言教程,入门篇、初级篇、中级篇、高级篇,我都看过,折腾很久才会用printf()函数,什么for、while、switch – case在那时都还不会用…


某天,没事就研究学习机,打开“虚拟终端”,我会的命令并不多,用ls命令查看了bin文件夹里的文件,随便选了一个,选到了gzip,加上“—help”参数,看了帮助,英文的,还不理解,上网查了一下,gzip是个压缩软件,能将文件压缩成gz格式的压缩文件,了解了这个后,又发现了tar和bzip2,经过测试,学习机里有这些软件,并且可用。但是,我发现敲命令行太麻烦,如果有个软件能简化操作就好了,于是就有了用C语言编写压缩管理程序的想法,从这个时候开始,“压缩管理”便成为我的第一个正式的C语言项目,也是我学C语言的目的,为什么要学C语言?学C语言干什么?这两个问题也就有了答案。


当时只会基本的函数: 用printf函数显示字符菜单, scanf函数接受按键输入,if语句判断输入内容,system函数调用命令进行操作,打印的字符界面还是黑白的;
 
由于是上高中,每个月只有放月假才能回去碰电脑,其余时间在学校,C语言代码大部分是用学习机在课余时间写的,两手握着学习机,疯狂的点击屏幕….
有时偶尔去网吧,用电脑敲代码,当然,是代码比较多、需要复制粘贴才去网吧的。

之前在学习机的论坛上见到某位高人的帖子,他的程序能在终端打印彩色字符,在QQ上问了相关人士(学C的),无果,只好去百度,关键词是:“linux 彩色 字符“,终于找到了答案:http://apps.hi.baidu.com/share/detail/24241711
不久,就将它应用了到我的程序,实现了彩色字符界面(如图所示)。



这时的“压缩管理“,功能很少,只支持指定位置里的文件的压缩及解压,想解压/压缩文件,就必须把文件放到指定的文件夹下,然后运行程序,进行操作。按键输入还是有毛病,不能一次性输入多个字符,否则,会跳过菜单显示,例如:主菜单有abcdef六个选项,每个选项都有子菜单,如果我输入ab,那么就会跳过a选项的子菜单的显示,直接执行子菜单中的b选项操作。为了解决这个问题,我用了这么个办法:scanf(“%s”,&str);,if语句判断,只判断str[0]的值,每次输入完后,清空str里的全部内容,编译时有warning。

“压缩管理“完成后,想在论坛上发布,与其他机油分享成果,但又不想让他们轻易获得这个程序(毕竟是个人的劳动成果,有点舍不得),于是就想到了一个办法:添加试用期,正版激活。试用期为7天;
如何获取时间?
毫无疑问,我去了CSDN论坛发帖,问了这个问题,帖子:http://topic.csdn.net/u/20101016/09/13d6c4c1-8099-4fad-bc3f-7d80dc898117.html。
 
如何知道程序安装时间?
我想, 程序第一次运行时创建一个文件,记录安装时间,以后运行就读取这个文件,要实现这个,需要用到C语言的文件操作类的函数,重新复习了一遍学习机里自带的教程,又在网上搜索了一番,我用了fprintf函数写入数据至文件,fscanf函数读取文件内容。

这时,我有了这么一个想法:
printf和fprintf都是输出数据,用法基本一样,前者是将内容输出至屏幕,后者是输出至文件,fprintf前面的f是指file吗?我想应该是的,那么,是不是有个输出至字符串变量的函数?字符串的名字是string, string+printf = sprint, 会有sprintf函数吗?百度了一下,真的有,而且用法和printf、fprintf的基本一样,这时,我便学会用sprintf函数改变字符串变量的内容了,对以后的字符串处理的帮助很大。

安装时间的保存和读取的功能已经基本实现,那如何知道还剩几天呢?
如何判断是否超过了试用期?
没法,为了这个问题,有空就拿个草稿纸,用笔在上面画程序运行流程图,先干什么,后干什么,判断什么,画着画着,还是觉得直接敲代码好一些;
判断时间,我用了一堆if语句,先判断年份,后判断月份,天,小时,分钟,秒;考虑到1月、3月、5月、7月、8月、10月、12月有31天,4月、6月、9月、11月有30天,而2月在平年有28天,闰年有29天,为了准确度,只好全部判断了。
如果让我现在来做,就不会用这个方法来判断了,具体用什么方法,你懂的!!!

试用期的天数的计算倒是勉强完成了,可是程序的正版激活如何实现?
像电脑上的软件那样用CD-Key激活?
CD-Key如何生成?
为了防止多个人共用一个CD-Key,如何实现一个学习机上只能用专有的CD-Key激活程序?
我是这样想的:
先实现独一无二的产品ID的生成,之后,通过算法算出对应的CD-Key,想激活程序的机油,可将产品ID以回帖方式发给我,我再给他CD-Key,这样就能增加帖子的回复数和人气,但是,这个功能由于本人当时技术水平有限,终究还是没实现,关于这个问题,在论坛上提过:
http://topic.csdn.net/u/20101010/13/51fb341e-05c8-46f3-919c-6b17d3955d80.html
http://topic.csdn.net/u/20101210/09/1b49f8b8-213d-4c40-8b1d-c6e3015d3ea7.html
 

 
使用7-zip作为主要利用的程序

“压缩管理”的第二个版本,也就是0.84版(之前的版本是测试版本),加入了很多新功能。那时,由于本人发现了一个强大的压缩软件:7-zip,就把它作为“压缩管理“调用的主要程序,改用命令行版的7-zip,支持解压的格式更多,压缩文件的可自定义参数也较多,包括了系统自带的tar、gzip、bzip2这三个压缩程序的功能;
 
为了更好的利用7-zip,我还特意研究了7-zip的命令行用法,花费了一些时间,终于实现了”压缩管理“的压缩参数设置功能,具体如图所示:

图中所示的是7z格式的压缩参数,更新后,又添加了几个选项:


Zip格式的压缩参数:
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: