比尔盖茨写的两行神奇的代码,就两行,据说难倒了一批程序猿~

hufanrong12345 2013-07-21 03:42:22
比尔盖茨在自传中提到了一个问题:

当初他用C#做抓取网页关键字的程序的时候写过下面的两行代码:

遵循request—>response—>stream的流程
先发送某个网址的请求,然后接收,转换编码,读取到流中不一样的是下面的两行代码:mystreamreader是返回的html代码流,要做的是对代码流做去空行处理

其他代码直接略过,只写两行:
第一种情况:
while (mystreamreader.ReadLine() != null)
{ mystringbuilder.Append(mystreamreader.ReadLine()); }

第二种情况:
string strl;
while ((strl = mystreamreader.ReadLine()) != null)
{ mystringbuilder.Append(strl); }

然后写了同样的抓取关键字的代码,也就是说,出了这两行之外,其他的都一样!当比尔盖茨输出抓取的关键字的时候,发现一个很奇怪的现象:
对于某些网页,第一种情况只抓取到了部分关键字,而第二种情况不论什么样的网页,都抓取到了所有关键字!

作为程序猿的你,知道问题出在哪里吗?
...全文
2227 40 打赏 收藏 转发到动态 举报
写回复
用AI写文章
40 条回复
切换为时间正序
请发表友善的回复…
发表回复
hufanrong12345 2013-07-24
  • 打赏
  • 举报
回复
引用 40 楼 hdt 的回复:
引用 39 楼 hufanrong123 的回复:
[quote=引用 23 楼 hdt 的回复:] [quote=引用 20 楼 sun__flow 的回复:] [quote=引用 11 楼 hdt 的回复:] 我想到了另外一个问题,如果因为出现这种情况,而造成的加班,老板需不需要付加班费?
肯定要付的,因为谁都会犯错误,谁都会有疏忽,除非老板能找到一个永远不犯错的人!
犯错是允许的,但这不叫做犯错,这叫愚蠢! 老板可以为犯错买单,但不能为愚蠢付款。[/quote]呵呵!版主如果要是不愚蠢,早就直接到美国微软总部去工作了,还会在可怜的csdn论坛里装逼?对于版主的言行,我只能呵呵了![/quote] 我是比较蠢,你这种sb问题,我就不应该掺乎? [/quote]还有哦,问题煞笔,总比人是蠢货强多了吧?呵呵!
hufanrong12345 2013-07-23
  • 打赏
  • 举报
回复
引用 40 楼 hdt 的回复:
引用 39 楼 hufanrong123 的回复:
[quote=引用 23 楼 hdt 的回复:] [quote=引用 20 楼 sun__flow 的回复:] [quote=引用 11 楼 hdt 的回复:] 我想到了另外一个问题,如果因为出现这种情况,而造成的加班,老板需不需要付加班费?
肯定要付的,因为谁都会犯错误,谁都会有疏忽,除非老板能找到一个永远不犯错的人!
犯错是允许的,但这不叫做犯错,这叫愚蠢! 老板可以为犯错买单,但不能为愚蠢付款。[/quote]呵呵!版主如果要是不愚蠢,早就直接到美国微软总部去工作了,还会在可怜的csdn论坛里装逼?对于版主的言行,我只能呵呵了![/quote] 我是比较蠢,你这种sb问题,我就不应该掺乎? [/quote]呵呵,既然你很蠢,对于你这种蠢货所说的话我们大家就可以忽视了!呵呵!
真相重于对错 2013-07-23
  • 打赏
  • 举报
回复
引用 39 楼 hufanrong123 的回复:
引用 23 楼 hdt 的回复:
[quote=引用 20 楼 sun__flow 的回复:] [quote=引用 11 楼 hdt 的回复:] 我想到了另外一个问题,如果因为出现这种情况,而造成的加班,老板需不需要付加班费?
肯定要付的,因为谁都会犯错误,谁都会有疏忽,除非老板能找到一个永远不犯错的人!
犯错是允许的,但这不叫做犯错,这叫愚蠢! 老板可以为犯错买单,但不能为愚蠢付款。[/quote]呵呵!版主如果要是不愚蠢,早就直接到美国微软总部去工作了,还会在可怜的csdn论坛里装逼?对于版主的言行,我只能呵呵了![/quote] 我是比较蠢,你这种sb问题,我就不应该掺乎?
hufanrong12345 2013-07-23
  • 打赏
  • 举报
回复
引用 23 楼 hdt 的回复:
引用 20 楼 sun__flow 的回复:
[quote=引用 11 楼 hdt 的回复:] 我想到了另外一个问题,如果因为出现这种情况,而造成的加班,老板需不需要付加班费?
肯定要付的,因为谁都会犯错误,谁都会有疏忽,除非老板能找到一个永远不犯错的人!
犯错是允许的,但这不叫做犯错,这叫愚蠢! 老板可以为犯错买单,但不能为愚蠢付款。[/quote]呵呵!版主如果要是不愚蠢,早就直接到美国微软总部去工作了,还会在可怜的csdn论坛里装逼?对于版主的言行,我只能呵呵了!
  • 打赏
  • 举报
回复
这个貌似一眼就是知道这两个有什么不同了吧, 原因就是比尔盖茨写的就能上首页?
yyl8781697 2013-07-22
  • 打赏
  • 举报
回复
第一种mystringbuilder变量里面何止是少了内容的一半,简直就是少了一半
sun__flow 2013-07-22
  • 打赏
  • 举报
回复
引用 23 楼 hdt 的回复:
引用 20 楼 sun__flow 的回复:
[quote=引用 11 楼 hdt 的回复:] 我想到了另外一个问题,如果因为出现这种情况,而造成的加班,老板需不需要付加班费?
肯定要付的,因为谁都会犯错误,谁都会有疏忽,除非老板能找到一个永远不犯错的人!
犯错是允许的,但这不叫做犯错,这叫愚蠢! 老板可以为犯错买单,但不能为愚蠢付款。[/quote]这就是愚蠢?那是不是微软是不是应该惩罚它的程序员?毕竟windows有那么多漏洞,可是也没有见微软因为这些漏洞特意开除过某个员工吧! 如果这真的叫愚蠢,那好,立马开除这样的愚蠢的员工就行了,干嘛还要计较需不需要加班费? 可是没有老板会这样做,因为他知道:我还要靠这样“愚蠢”的员工来给他创造利润,我只要骂他“愚蠢”,就能以此为借口扣掉他的钱,还能节省成本。 如果一个老板已经认定一个人愚蠢,就不要再给他机会表现他的愚蠢就可以了。可是,如果认定一个员工愚蠢,可是你还是以要继续用他,那在这个老板的心里,他的“愚蠢”就不是愚蠢,只是犯错(毕竟他还能给自己创造价值),您说对吧!
william-lv 2013-07-22
  • 打赏
  • 举报
回复
看不懂这个 路过打酱油
  • 打赏
  • 举报
回复
引用 23 楼 hdt 的回复:
引用 20 楼 sun__flow 的回复:
[quote=引用 11 楼 hdt 的回复:] 我想到了另外一个问题,如果因为出现这种情况,而造成的加班,老板需不需要付加班费?
肯定要付的,因为谁都会犯错误,谁都会有疏忽,除非老板能找到一个永远不犯错的人!
犯错是允许的,但这不叫做犯错,这叫愚蠢! 老板可以为犯错买单,但不能为愚蠢付款。[/quote]你以为你能分的出来,老板就一定能分的出来吗
真相重于对错 2013-07-22
  • 打赏
  • 举报
回复
引用 20 楼 sun__flow 的回复:
引用 11 楼 hdt 的回复:
我想到了另外一个问题,如果因为出现这种情况,而造成的加班,老板需不需要付加班费?
肯定要付的,因为谁都会犯错误,谁都会有疏忽,除非老板能找到一个永远不犯错的人!
犯错是允许的,但这不叫做犯错,这叫愚蠢! 老板可以为犯错买单,但不能为愚蠢付款。
aqbeyond 2013-07-22
  • 打赏
  • 举报
回复
比尔盖茨曾经说过,他可以用VB开发所有的程序。 说明比尔盖茨只会VB,是不可能懂C#的。
用眼神瞬杀你 2013-07-22
  • 打赏
  • 举报
回复
sun__flow 2013-07-22
  • 打赏
  • 举报
回复
引用 11 楼 hdt 的回复:
我想到了另外一个问题,如果因为出现这种情况,而造成的加班,老板需不需要付加班费?
肯定要付的,因为谁都会犯错误,谁都会有疏忽,除非老板能找到一个永远不犯错的人!
Vincent_Song 2013-07-22
  • 打赏
  • 举报
回复
比尔盖茨写程序时C#还没出生那,撸主哗众取宠利用名人效应解决自己遇到的问题,实属不该啊!
皮特尔 2013-07-22
  • 打赏
  • 举报
回复
有点意思,谢谢楼主分享。
xiaocongzhi 2013-07-22
  • 打赏
  • 举报
回复
是读了两次,bill gates也犯这问题,哈哈
真相重于对错 2013-07-22
  • 打赏
  • 举报
回复
引用 26 楼 sun__flow 的回复:
引用 23 楼 hdt 的回复:
[quote=引用 20 楼 sun__flow 的回复:] [quote=引用 11 楼 hdt 的回复:] 我想到了另外一个问题,如果因为出现这种情况,而造成的加班,老板需不需要付加班费?
肯定要付的,因为谁都会犯错误,谁都会有疏忽,除非老板能找到一个永远不犯错的人!
犯错是允许的,但这不叫做犯错,这叫愚蠢! 老板可以为犯错买单,但不能为愚蠢付款。[/quote]这就是愚蠢?那是不是微软是不是应该惩罚它的程序员?毕竟windows有那么多漏洞,可是也没有见微软因为这些漏洞特意开除过某个员工吧! 如果这真的叫愚蠢,那好,立马开除这样的愚蠢的员工就行了,干嘛还要计较需不需要加班费? 可是没有老板会这样做,因为他知道:我还要靠这样“愚蠢”的员工来给他创造利润,我只要骂他“愚蠢”,就能以此为借口扣掉他的钱,还能节省成本。 如果一个老板已经认定一个人愚蠢,就不要再给他机会表现他的愚蠢就可以了。可是,如果认定一个员工愚蠢,可是你还是以要继续用他,那在这个老板的心里,他的“愚蠢”就不是愚蠢,只是犯错(毕竟他还能给自己创造价值),您说对吧![/quote] 中国队1:5,巴萨1:7,按照你的说法,中国队是否可以和巴萨等量齐观了?
猴头 2013-07-22
  • 打赏
  • 举报
回复
引用 35 楼 efaye_yang 的回复:
楼主故事本意并不是说比尔盖茨什么什么的,而是表达一个思想,其实很多错误、BUG都是不经意当中产生的
好吧,我承认 我犯过 这种错误........
efaye_yang 2013-07-22
  • 打赏
  • 举报
回复
楼主故事本意并不是说比尔盖茨什么什么的,而是表达一个思想,其实很多错误、BUG都是不经意当中产生的
efaye_yang 2013-07-22
  • 打赏
  • 举报
回复
第一种情况下mystreamreader.ReadLine() 执行的是一个方法,执行后,回转到下一个line,在while的时候已经执行了一次,然后在while体内mystringbuilder.Append语句又执行了一次,因此,一次循环实际执行了两次ReadLine(),而只有一条mystringbuilder.Append语句,所以会抓不全,而第二个方法先把mystreamreader.ReadLine() 的结果赋值给str并做判断mystringbuilder.Append的时候是传输的str而未做mystreamreader.ReadLine() ,因此数据是全的
加载更多回复(20)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧