admin 发布的文章

PingInfoView - 批量Ping工具

PingInfoView可以允许Ping多个主机名和IP 地址的一个小工具, 并且可以在同一个显示器上观看结果。

它运行速度快,占用资源少是软件的特点。
使用方法:
1、解压缩下载的文件
2、双击文件“PingInfoView.exe”,直接输入要ping的地址列表。
3、点击确定即可得结果,可查询IP地址,响应时间,成功次数等。

下载地址:http://kuai.xunlei.com/d/PXWBSVXLHPEQ

人性悖论 - 一个人炫耀什么说明内心缺少什么

人性悖论:1一个人炫耀什么,说明内心缺少什么。2一个人越在意的地方,就是最令他自卑的地方。3有些人越想得到的,就越装作无所谓;越怕失去的,就越是装作不在乎。 4人越是得意的事情,越爱隐藏;越是痛苦的事情,越爱小题大作。5憎恨某人,优点被看成伪装;6喜欢某人,缺点也变得美好。

getch、getche、getchar的区别和缓冲区的概念

1.输入输出缓冲区的概念(C++用的多一些)

我想以一个例子说明,比如我想把一篇文章以字符序列的方式输出到计算机显示器屏幕上,那么我的程序内存作为数据源而显示器驱动程序作为数据目标,如果数据源直接对数据目标发送数据的话。数据目标获得第一个字符,便将它显示。然后从端口读取下一个字符,可是这时就不能保证数据源向端口发送的恰好是第二个字符(也许是第三个,而第二个已经在数据目标显示时发送过了)。这样的话就不能保证输出的数据能完整的被数据目标所接受并处理。

      为了解决这个问题,我们需要在数据源与数据目标中间放置一个保存完整数据内容的区域,那就是 “缓冲区”。这样的话, 数据源可以不考虑数据目标正在处理哪部分数据,只要把数据输出到缓冲区就可以了,数据目标也可以不考虑数据源的发送频率,只是从缓冲区中依次取出下一个数据。从而保证了数据发送的完整性,同时也提高了程序的效率。

     当然getch(),getche()没有用到缓冲区。

2.几个函数的区别

首先不要忘了,要用getch()必须引入头文件conio.h,以前学C语言的时候,我们总喜欢用在程序的末尾加上它,利用它来实现程序运行完了暂停不退出的效果。如果不加这句话,在TC2.0的环境中我们用Ctrl+F9编译并运行后,程序一运行完了就退回到TC环境中,我们根本来不及看到结果,这时要看结果,我们就要按Alt+F5回到DOS环境中去看结果,这很麻烦。而如果在程序的结尾加上一行getch();语句,我们就可以省掉会DOS看结果这个步骤,因为程序运行完了并不退出,而是在程序最后把屏幕停住了,按任意键才退回到TC环境中去。

那我们来看看getch()到底起的什么作用,getch()实际是一个输入命令,作用是从键盘接收一个字符,而且并不把这个字符显示出来,就是说,你按了一个键后它并不在屏幕上显示你按的什么,而继续运行后面的代码,所以我们在C++中可以用它来实现“按任意键继续”的效果,即程序中遇到getch();这行语句,它就会把程序暂停下来,等你按任意键,它接收了这个字符键后再继续执行后面的代码。

你也许会问,为什么我们在C++中就没有在程序的末尾加上getch(),解释是,软件总是不断更新的,不好的地方当然要进行改正,getch()加在程序末尾,它又不赋值给任何变量,所以它在这个地方完全是垃圾代码,与程序无关。C++中考虑到这一点,于是在每次程序运行完了并不退出,而是自动把屏幕停下来,并显示“press any key...”叫你按任意键退出,这就好比C++在它的环境中运行程序,在程序的末尾自动加上了一行getch();语句,并且在这行语句前还添加了一行输出语句cout<<"press any key...";来提示你程序结束了,按任意键继续。

实际上我们编译好的程序在程序结束了本身是不会停下来的,我们可以在编译产生的Debug目录中找到这个编译好的应用程序(扩展名exe),在文件夹中双击运行它,你会发现屏幕闪了一下MS-DOS窗口就关闭了,因为程序运行完就自动退出了,回到了windows环境,当然,如果我们在DOS环境中运行这个程序,我们就可以直接在看到DOS屏幕上看到程序运行结果,因为程序运行完后并不清屏。但是,visual stdio.net2003有返回到了tc那样的情况,你必需要有个getch()才行。

getche()和getch()很相似,它也需要引入头文件conio.h,那它们之间的区别又在哪里呢?不同之处就在于getch()无返回显示,getche()有返回显示。就这么一点看看下面的例子:

#include<stdio.h>
#include<conio.h>
void main()
{
char ch;
for(int i=0;i<5;i++)
{
ch=getch();
printf("%c",ch);
}
}

首先这是个连续5次的循环来实现5次停顿,等待我们输入,我们编译并运行这个程序,假设我们分别输入abcde,屏幕上显示的结果是abcde,这个abcde并不是在ch=getch();中输出的,我们把printf("%c",ch);这行语句去掉,就会发现我们按5次任意键程序就结束了,但屏幕上什么都没有显示。

然后我们在把代码中的getch()换成getche()看看有什么不同,我们还是分别输入abcde,这时屏幕上显示的结果是aabbccddee,我们把printf("%c",ch);这行语句再去掉看看,显示的结果就是abcde了,说明程序在执行ch=getche();这条语句的时候就把我们输入的键返回显示在屏幕上,有无回显就是它们的唯一区别。

有人会说,既然是C的函数库中的,那么就应该淘汰了,我们还研究它,还用它干嘛?但是我发现还是有用着它的地方,否则我也不会在这里说这么多来耽误大家的时间。我就举个例子吧,程序如下:
#include<stdio.h>
#include<conio.h>

void main()
{
char ch='*';
while(ch=='*')
{
printf("/n按 * 继续循环,按其他键退出!");
ch=getch();
}
printf("/n退出程序!");
}

我们可以在这个循环体中添加我们想要的功能,程序中按*继续循环,其他任意键退出,而且利用getch()无回显的特性,我们不管按什么,都不会在屏幕上留下痕迹,使我们的界面达到美观效果,如果还有更好的办法实现这个功能。例子:

void main()
{
char c, ch;
c=getch();     /*从键盘上读入一个字符不回显送给字符变量c*/
putchar(c);    /*输出该字符*/
ch=getche();   /*从键盘上带回显的读入一个字符送给字符变量ch*/
putchar(ch);
printf("/n/n");
}

    值得注意的是前面两个函数都是从键盘读入数据!

还有getchar是很值得研究的:getchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,也就是说,如果stdin有数据的话不用输入它就可以直接读取了。而getch()和getche()是conio.h中的库函数,它的作用是从键盘接收字符。getchar带有显示。

    与前面两个函数的区别在于: getchar()函数等待输入直到按回车才结束(前提是缓冲区没有数据),回车前的所有输入字符都会逐个显示在屏幕上。但只有第一个字符作为函数的返回值。

#include<stdio.h>
#include<conio.h>
void main()
{
char c;
c=getchar();   /*从键盘读入字符直到回车结束*/
//getchar()在这里它只返回你输入字符串的第一个字符,并把返回值赋值给c
putchar(c);    /*显示输入的第一个字符*/
printf("/n/n");
}

例四:呵呵,这个程序你运行一下,相信你又会有疑问了。这个就是从缓冲区中读取了例子。第一次getchar()时,确实需要人工的输入,但是如果你输了多个字符,以后的getchar()再执行时就会直接从缓冲区中读取了。

#include<stdio.h>

#include<conio.h>

void main()

{

char c;

while ((c=getchar())!='/n')    /*每个getchar()依次读入一个字符*/

printf("%c",c);        /*按照原样输出*/

printf("/n/n");

}

程序运行时,首先停下来,等你输入一串字符串,输入完毕后,它把你输入的整个字符串都输出来了,咦,你不是说getchar()只返回第一个字符么,这里怎么?

因为我们输入的字符串并不是取了第一个字符就把剩下的字符串丢掉了,它还在我们的内存中,就好比,开闸放水,我们把水放到闸里去以后,开一次闸就放掉一点,开一次就放掉一点,直到放光了为止,这里开闸动作就相当于调用一次getchar()。我们输入的字符串也是这么一回事,首先我们输入的字符串是放在内存的缓冲区中的,我们调用一次getchar()就把缓冲区中里出口最近的一个字符输出,也就是最前面的一个字符输出,输出后,就把它释放掉了,但后面还有字符串,所以我们就用循环把最前面的一个字符一个个的在内存中释放掉,直到不满足循环条件退出为止。

例子中循环条件里的'/n'实际上就是你输入字符串后的回车符,所以意思就是说,直到遇到回车符才结束循环,而getchar()函数就是等待输入(或缓冲区中的数据)直到按回车才结束,所以实现了整个字符串的输出。当然,我们也可以把循环条件改一下,比如while ((c=getchar())!='a'),什么意思呢,意思就是遇到字符'a'就停止循环,当然意思是如果你输入“12345a213123/n”那么只会输出到a,结果是12345a。

再次注意:用getchar()它是从“流”中间去读取,所以第一个getchar()接受的是刚刚中断的流队列中即将出列的第一个字符(不限于回车符,上面举过例子了),如果流队列不为空,执行getchar()就继续放水,直到把回车符也放空为止,空了之后再在执行getchar()就停下等待你的输入了;我们用getch()为什么每次都是等待用户的输入呢?因为getch()是从键盘接收,即时的接收,并不是从stdin流中去读取数据。

    补充:按键盘上的回车产生了2个字符:回车符('/r')和换行符('/n')。回车符'/r'(CR:carriage return:倒车)使光标回到这行的首部,换行符('/n')(new line)然后再换行。

    所以当输入字符'w',并按下回车键以后。首先得到回车符。那个getchar函数结束了。 但是还存在一个换行符。所以如果用getchar()来做判断的时候。最好再写一次getchar()清除缓冲区的'/n'.

3如何清空输入缓冲区的内容

    如果我想让getchar()每次都能够等待用户输入的话就要清空缓冲区,下面就介绍方法(不同平台)

       C标准规定 fflush()函数是用来刷新输出(stdout)缓存的。对于输入(stdin),它是没有定义的。但是有些编译器也定义了 fflush( stdin )的实现,比如微软的VC。其它编译器是否也定义了 fflush( stdin )的实现应当查找它的手册。GCC编译器没有定义它的实现,所以不能使用 fflush( stdin )来刷新输入缓存。

       对于没有定义 fflush( stdin )的编译器,可以使用 fgets()函数来代替它(比用 getchar()、scanf()等函数通用性好)。可以这样忽略输入流中留下的回车等其它输入,从而使下一次的输入总保持一个“干净”的状态。(这个是任何平台下都可以的)
// ...
char sbuf[1024];
// ...
fgets( sbuf, 1024, stdin );
// ...

在windows 的vc下面就可以这样了:

for(int i=0;i<10;++i)

{

       char ch=getchar();

       fflush(stdin); //每次都会有等待状态了

}

4.总结 主要看getch(),getche()的是否显示,getchar()是读取流,而且和前面两个函数不是一个库。掌握清空缓冲区的方法。

向朋友借钱 - 也许你并没有多少朋友

上个月,我的一个朋友魏某因为生意上出了点意外,急需要一笔钱,当他打电话给我时,我感觉有一点奇怪,因为我们的关系仅仅只限于一般朋友,故此,就有了一点点犹豫。

我说:一会儿我给你电话吧。
我考虑了十分钟,决定把这钱借给他。
上个星期,他把钱还给了我,之后请我喝茶。
他说:你答应借钱给我还真出乎我的意料之外!
我问:为什么?
他回答:打你电话之前我已经打过9通电话,你是第10个。当你说“一会儿给你电话”时,我认为我需要打第11通电话了。我是按照亲疏关系打的这10通电话,越打到后面越没有信心,所以,打你电话已经是死马当成活马医的心态了。

之后,就这个话题我们谈论了许多,他总结性地说了一句话:如果不是这次借钱,我还以为我有很多朋友,现在我才明白,原来我是这么孤独。

过后的几天我都在想这件事,然后,我决定了解一下自己到底是否也如我那个朋友一样那么孤独。在做这件事之前,我把想法打电话告诉了他,他笑了:我劝你还是别做这种游戏,这会让你感觉从天堂落入了地狱!
我把现在身边自认为的好朋友的名字挑了出来,这些人都在本地,外地的暂不列入,他们和我从来没有金钱上的借贷关系,也和我的工作没有任何牵连,我们经常在一起,要不吃饭,要不喝茶,要不泡酒吧,相互之间我帮他们的一点小忙的时候居多,属于纯粹意义上的朋友,有9个人,而且他们的经济实力借个几万块肯定是没很大的问题的。
我给他们每人发了一条内容差不多的短信:
我现在遇到点麻烦,需要问你借X万块钱,一个月之内归还。如行的话给我电话,不行就发个信息吧,也不要紧,我等你答复。
我是昨天下午发的,晚饭时间未到,收到了7条信息,2通电话。信息基本回的都很快,全没超过一个小时,其中一通电话是信息发出后20分钟左右来的,还有一通是信息发出后2个半小时左右打来的。7条信息内容如下:(除了我的名字用xx代替,别人的名字用Y代替,信息内容一字未改)
陈:真对不起!我目前有点困难,真的,要不然你的事情肯定没话说的,你问问YYY吧,不好意思!(注:YYY是我们一起认识的朋友)
乔:XX,上个星期我小舅子刚问我借了20万,下个月还有点可能,真对不起!
唐:这段时间我自己都很困难,前一段打麻将输了好多钱,XX,不好意思,我要情况好的话绝对没问题的。
王:真不好意思了,我的钱都在股票里,对不起!
陈:XX,你怎么会要借钱哦,我昨天才借给人家10万,是放息的,你又不早说,不好意思,你再想想别的办法咯。
陆:对不起,最近我的股票都套牢了,手里没有现金,不好意思呵!
章:XX,我儿子开学就要转到浦东的YY中学去(这里校名省略),那是寄宿学校,开学就要交5万,真的没办法帮你,请原谅!
电话是姓王和姓张的朋友打来的。

第一通电话:
王:喂,XX吗?
我:你好,是我!
王:搞什么搞,怎么这么点钱还要借啊?你出什么事儿了?
我:没出什么事儿,我钱放在市场里,一时半会儿出不来,我弟弟有点事儿,急用的。
王:没出事儿就好。你在公司啊?
我:啊,是啊!
王:我儿子上学被人家自行车给撞了,小腿骨折,我几天都没出门了。
我:啊?你儿子骨折怎么没听你说啊?要帮忙吗?
王:我请了一星期假,我老公那个该死的公司又请不到假,我准备下个星期让我妈过来帮着照顾,你别管了!你把银行卡的卡号告诉我,我让我老公明天上班给你打过去。

……………………………………

第二通电话:
张:喂,XX啊,我是张Y哦,你现在在哪里?
我:我在公司啊!
张:哦,我刚到店里,钱已经准备好了,是我送过去还是你过来拿?
我:怎么好意思让你送过来啊,这样吧,我一会儿去你那儿给你写张借条,钱到时就打到我卡上吧。
张:那你把卡号给我,我现在就帮你打过去,什么行啊?工行还是建行?
我:随便,哪个行你方便?
张:我店对面就是工行,你把工行卡号给我吧。
…………………………

昨晚,魏某和我又一起去了咖吧,又各自发了一番感慨。我告诉他,借钱给我的这2个朋友平时从来没有麻烦过我替他们解决任何事情,其它的朋友倒是时不时地要麻烦我,一会儿是电脑的问题,一会儿是股票的问题,一会儿是投资的问题……

他问我:借你钱的朋友你准备告诉他们实情吗?
我说:除非我今晚开始神经了!
他笑了,很落寞地说:从现在开始,你只有这2个朋友了。

我不记得曾经看过一本什么书,似乎有过这样一句话:帮助过你的人永远都会帮助你,但你帮过的人就不一定。我也笑了,看着眼前袅袅升起的烟雾,淡淡地说:心里明白,嘴上不说,也没什么不好。这样以后真的遇到困难,就知道该找谁帮忙了,省得求一些靠不住的人,自己心里难受,别人心里尴尬,还耽误了事情。知道什么样的朋友是可以一起玩的,知道什么样的朋友是可以依靠的。对于那些可以一起玩的朋友,就平时一起娱乐,不要用事情去麻烦他们;对于那些可以依靠的,就要好好对待他们,别看我有很多朋友,真正靠得住的只有这廖廖数人。爱惜自己靠得住的朋友,努力使自己成为别人靠得住的朋友,这样,你才能在这个城市里扎下根来。

感言:就算你人缘再好,能在你困难的时候帮助你的还是只有那么寥寥数人,狂欢,不过是一群人的孤单。真正的朋友,是能够伴你度过寂寞、孤独以及沉默的那个人。

其实,我以前读过这句话,貌似是出自一个犹太商人求助的故事,我也认为这句话非常有道理。到底什么是朋友呢,我觉得以下这几个定义可以很好的阐述这一点1、好朋友在一起不是有说不完的话,而是就算不说话,也不会觉得尴尬。2、朋友就是把你看透了还愿意和你在一起的人。3、朋友就是不为任何理由来看你的人。

(转自网络)

捕食者物体追踪算法Predator-Overview

从youtube上弄下来的视频,英国萨里大学的小伙Zdenek Kalal的突破性成果,其Learning算法的研究思路(包括正例和反例的同时learning)很有启发性.

Zdenek Kalal是英国萨里大学的一个捷克学生。他演示的是他的神奇的精确定位系统,这个系统几乎可以跟踪镜头里的任何物体,只要你能看见它,并把它选中。 它能做很多神情的事情。在这个视频中,他演示了通过摄像机拍摄他的手指、把他的手指选做目标。系统于是就能精确的跟踪他的手指的动作。更令人惊奇的是,这个系统能够通过分析物体的运动来完善跟踪算法。你能在很短的时间里教会它跟踪你的手指、面孔或在高速公路上狂颠的轿车。有了这套系统,我们几乎真的可以实现”Minority Report“那样的人机界面。就像微软Xbox的Kinect那样,而这个效果更好。 Kalal有12个视频来演示他的这套算法都能做什么。只要你有一个好的摄像头,把这个软件装到计算机上、平板电脑上或手机里,它就能精确的定位跟踪你的前额上的一个点、你的指尖、或你的眼睛。你把摄像头放到门外,它就能自动识别是你认识的人来了,或警告你这是个陌生人。人们不用通过手就能简单的操控计算机。这项技术应用前景广泛。 你可以从萨里大学的网站找到这个程序的代码,它是免费的。Kalal被授予了“Technology Everywhere”奖学金作为嘉奖。

下载链接:http://info.ee.surrey.ac.uk/Personal/Z.Kalal/tld.html