比尔盖茨在自传中提到了一个问题:当初他用C#做抓取网页关键字的程序的时候写过下面的两行代码:遵循request—>response—>stream的流程
先发送某个网址的请求,然后接收,转换编码,读取到流中不一样的是下面的两行代码:mystreamreader是返回的html代码流,要做的是对代码流做去空行处理其他代码直接略过,只写两行:
第一种情况:
while (mystreamreader.ReadLine() != null)
{ mystringbuilder.Append(mystreamreader.ReadLine()); }第二种情况:
string strl;
while ((strl = mystreamreader.ReadLine()) != null)
{ mystringbuilder.Append(strl); }然后写了同样的抓取关键字的代码,也就是说,出了这两行之外,其他的都一样!当比尔盖茨输出抓取的关键字的时候,发现一个很奇怪的现象:
对于某些网页,第一种情况只抓取到了部分关键字,而第二种情况不论什么样的网页,都抓取到了所有关键字!作为程序猿的你,知道问题出在哪里吗?比尔盖茨String编码readline

解决方案 »

  1.   

    mystreamreader.ReadLine());
    这行代码写了两次,没看到吗?
      

  2.   

    后来比尔盖茨来到csdn论坛,看到版主,直接爆了版主的菊花!
      

  3.   

    就像 DataReader一样,只能向前读。
      

  4.   

    mystreamreader.ReadLine() 之行一次读一行,每一次运行读一行。感觉楼主瞎扯,不太可能是比尔盖茨提出来的。能否给出出处?
      

  5.   

    是读了两次,bill gates也犯这问题,哈哈
      

  6.   

    你这yy... 我还不如yy下天朝一统天下,然后世界和平。
      

  7.   

    比尔盖茨曾经说过,他可以用VB开发所有的程序。
    说明比尔盖茨只会VB,是不可能懂C#的。
      

  8.   

    犯错是允许的,但这不叫做犯错,这叫愚蠢!
    老板可以为犯错买单,但不能为愚蠢付款。这就是愚蠢?那是不是微软是不是应该惩罚它的程序员?毕竟windows有那么多漏洞,可是也没有见微软因为这些漏洞特意开除过某个员工吧!如果这真的叫愚蠢,那好,立马开除这样的愚蠢的员工就行了,干嘛还要计较需不需要加班费?
    可是没有老板会这样做,因为他知道:我还要靠这样“愚蠢”的员工来给他创造利润,我只要骂他“愚蠢”,就能以此为借口扣掉他的钱,还能节省成本。
    如果一个老板已经认定一个人愚蠢,就不要再给他机会表现他的愚蠢就可以了。可是,如果认定一个员工愚蠢,可是你还是以要继续用他,那在这个老板的心里,他的“愚蠢”就不是愚蠢,只是犯错(毕竟他还能给自己创造价值),您说对吧!
      

  9.   

    第一种mystringbuilder变量里面何止是少了内容的一半,简直就是少了一半
      

  10.   

    mystreamreader.ReadLine() 调用第二次的时候已经不是刚刚那个了
      

  11.   

    遇到过这种情况,其实ReadLine() 相当于list.next().每执行一次跳到下一行。第一种是一次循环跳了两次。只读了偶数行。
      

  12.   

    据说比尔盖茨是写BASIC长大的,那个时候C还没出生呢
      

  13.   

    楼主在YY  还比比尔盖茨  C#才出来几年啊???
      

  14.   

    第一种情况下mystreamreader.ReadLine()  执行的是一个方法,执行后,回转到下一个line,在while的时候已经执行了一次,然后在while体内mystringbuilder.Append语句又执行了一次,因此,一次循环实际执行了两次ReadLine(),而只有一条mystringbuilder.Append语句,所以会抓不全,而第二个方法先把mystreamreader.ReadLine()  的结果赋值给str并做判断mystringbuilder.Append的时候是传输的str而未做mystreamreader.ReadLine() ,因此数据是全的
      

  15.   

    楼主故事本意并不是说比尔盖茨什么什么的,而是表达一个思想,其实很多错误、BUG都是不经意当中产生的
      

  16.   

    犯错是允许的,但这不叫做犯错,这叫愚蠢!
    老板可以为犯错买单,但不能为愚蠢付款。这就是愚蠢?那是不是微软是不是应该惩罚它的程序员?毕竟windows有那么多漏洞,可是也没有见微软因为这些漏洞特意开除过某个员工吧!如果这真的叫愚蠢,那好,立马开除这样的愚蠢的员工就行了,干嘛还要计较需不需要加班费?
    可是没有老板会这样做,因为他知道:我还要靠这样“愚蠢”的员工来给他创造利润,我只要骂他“愚蠢”,就能以此为借口扣掉他的钱,还能节省成本。
    如果一个老板已经认定一个人愚蠢,就不要再给他机会表现他的愚蠢就可以了。可是,如果认定一个员工愚蠢,可是你还是以要继续用他,那在这个老板的心里,他的“愚蠢”就不是愚蠢,只是犯错(毕竟他还能给自己创造价值),您说对吧!
    中国队1:5,巴萨1:7,按照你的说法,中国队是否可以和巴萨等量齐观了?
      

  17.   

    犯错是允许的,但这不叫做犯错,这叫愚蠢!
    老板可以为犯错买单,但不能为愚蠢付款。呵呵!版主如果要是不愚蠢,早就直接到美国微软总部去工作了,还会在可怜的csdn论坛里装逼?对于版主的言行,我只能呵呵了!
      

  18.   

    犯错是允许的,但这不叫做犯错,这叫愚蠢!
    老板可以为犯错买单,但不能为愚蠢付款。呵呵!版主如果要是不愚蠢,早就直接到美国微软总部去工作了,还会在可怜的csdn论坛里装逼?对于版主的言行,我只能呵呵了!
    我是比较蠢,你这种sb问题,我就不应该掺乎?
      

  19.   

    犯错是允许的,但这不叫做犯错,这叫愚蠢!
    老板可以为犯错买单,但不能为愚蠢付款。呵呵!版主如果要是不愚蠢,早就直接到美国微软总部去工作了,还会在可怜的csdn论坛里装逼?对于版主的言行,我只能呵呵了!
    我是比较蠢,你这种sb问题,我就不应该掺乎?
    呵呵,既然你很蠢,对于你这种蠢货所说的话我们大家就可以忽视了!呵呵!
      

  20.   

    犯错是允许的,但这不叫做犯错,这叫愚蠢!
    老板可以为犯错买单,但不能为愚蠢付款。呵呵!版主如果要是不愚蠢,早就直接到美国微软总部去工作了,还会在可怜的csdn论坛里装逼?对于版主的言行,我只能呵呵了!
    我是比较蠢,你这种sb问题,我就不应该掺乎?
    还有哦,问题煞笔,总比人是蠢货强多了吧?呵呵!