代码之家  ›  专栏  ›  技术社区  ›  Isaac

K&R计数字符帮助示例

  •  3
  • Isaac  · 技术社区  · 16 年前

    我正在努力完成K&R的第二版,我遇到了一个看似简单的例子:

    #include <stdio.h>
    
    main(){
        double c;
        for(c = 0; ((getchar() != EOF) && (getchar() != '\n')); ++c)
            ;
        printf("%.0f\n",c);
    }
    

    只是工作不正常。我加入了 (getchar() != '\n') 按Enter键结束程序,但没有 真的? 帮帮我。

    下面是一些示例输出,使用 gcc 这是Mac OSX 10.6 dev工具附带的。

    pool-000:Desktop user$ ./a.out 
    a
    0
    pool-000:Desktop user$ ./a.out 
    asdf
    
    2
    pool-000:Desktop user$ ./a.out 
    asfasf
    
    3
    

    所以很明显有问题。如果有帮助的话,我在第18页。这不是家庭作业,这是为了好玩!

    谢谢)

    2 回复  |  直到 16 年前
        1
  •  5
  •   unwind    16 年前

    每次呼叫 getchar() 将等待一个字符被读取,所以每次循环迭代时,您读取的内容比您想象的要多。

    而且,至少在我看来,一个柜台是(几乎)从来没有一个 double ,应使用整数类型,如plain old int .

        2
  •  3
  •   Peter K.    16 年前

    执行两个“getchar()”操作的问题是,您将在条件测试中读取两个get chars…在你进入++C之前。

    放弃“EOF”比较,它应该如您所期望的那样工作。