当前位置:  开发笔记 > 运维 > 正文

K&R书中的C编程练习

如何解决《K&R书中的C编程练习》经验,为你挑选了4个好方法。

知道为什么以下代码不打印输入中的字符数量?我直接从K&R书中看到了这一点.此刻学习C这真的很令人困惑,在我看来我永远不会达到EOF.如果是这种情况那么为什么这会被用作一个例子呢?

#include 

main()
{
    double nc;

    for (nc = 0; getchar() != EOF; ++nc)
        ;
    printf("%d\n", nc);
}

Jeremy Ruten.. 12

该程序看起来正确,您的问题是您必须EOF在输入后将(文件结束)发送到命令行,因为标准输入被视为文件.我想在linux终端你可以按Ctrl + D发送EOF...我不知道如何在其他操作系统中执行此操作.要测试此程序,您可能希望更改EOF'\n'在按Enter键时停止该程序.



1> Jeremy Ruten..:

该程序看起来正确,您的问题是您必须EOF在输入后将(文件结束)发送到命令行,因为标准输入被视为文件.我想在linux终端你可以按Ctrl + D发送EOF...我不知道如何在其他操作系统中执行此操作.要测试此程序,您可能希望更改EOF'\n'在按Enter键时停止该程序.



2> Robert Gambl..:

该计划一直读取从数据中stdin,直到EOF被接收,这是通过在Windows控制台行的开头一个Unix控制台或Ctrl-Z一行的开头按Ctrl-d完成的.EOF以这种方式发出信号后,printf将执行该功能,显示读取的字符数.



3> EvilTeach..:

ncprintf("%lf", nc)打印双打的双重用途.

试试这个

#include 

int main(void)
{
    int nc;

    for (nc = 0; getchar() != EOF; ++nc)
        ;
    printf("%d\n", nc);

    return 0;
}



4> Chris Young..:

我想澄清到目前为止给出的答案,因为他们似乎使用"发送EOF","收到EOF","EOF字符"等词语.根据评论(感谢)这个答案,"发送EOF"和"收到EOF"是合法的条款,但请不要认为这是一个角色.

EOF根本不是一个角色.如果流处于"文件结束"或发生读取错误,则getchar()(或fgetc/getc)返回的值.它只是一个超出字符值范围的特殊值,getchar()将返回它指示错误或文件结束的条件.

它由C标准定义为负数,而getchar将字符作为转换为int的unsigned char返回.

编辑:在做我曾经写过的段落之前我应该​​做的一些研究,我已经意识到我的一些假设是完全错误的.感谢评论者指出这一点.

一旦流(例如stdin)处于文件结束条件,就可以使用clearerr()再次清除此条件,并且getchar()可以从stdin读取更多数据.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有