K&;中与基本getchar()相关的函数;遥控书不起作用? #包括 main() { 双数控; 对于(nc=0;getchar()!=EOF;++nc); printf(“%1d\n”,nc); }

K&;中与基本getchar()相关的函数;遥控书不起作用? #包括 main() { 双数控; 对于(nc=0;getchar()!=EOF;++nc); printf(“%1d\n”,nc); },c,eof,stdio,C,Eof,Stdio,这是我第一次学习C语言,有一些事情我似乎不太了解。for循环有一个相当简单的结构,唯一的约束是如果getchar不等于EOF(无论EOF设置为什么值)。每次getchar不等于EOF,nc都会递增。最后,我们将nc调整为字符串的长度,从而退出for循环 但是,该程序只接受输入,不显示应与字符长度关联的值。 我不明白什么?我假设这本书比我更有可能是对的,所以我想我在某个地方出错了。你有三种可能的选择 将double更改为int 将printf()中的%d“更改为%lf” 将nc转换为int如下(i

这是我第一次学习C语言,有一些事情我似乎不太了解。for循环有一个相当简单的结构,唯一的约束是如果
getchar
不等于
EOF
(无论
EOF
设置为什么值)。每次
getchar
不等于
EOF
nc
都会递增。最后,我们将
nc
调整为字符串的长度,从而退出for循环

但是,该程序只接受输入,不显示应与字符长度关联的值。
我不明白什么?我假设这本书比我更有可能是对的,所以我想我在某个地方出错了。

你有三种可能的选择

  • double
    更改为
    int
  • printf()
    中的
    %d“
    更改为
    %lf”
  • nc
    转换为
    int
    如下
    (int)nc
  • 它也将计算
    '\n'

    或者如果您不想计算“\n”

    #include <stdio.h>
    
    main()
    {
        double nc;
    
        for(nc=0; getchar()!=EOF; ++nc);
        printf("%1d\n",nc);
    }
    

    你有三种可能的选择

  • double
    更改为
    int
  • printf()
    中的
    %d“
    更改为
    %lf”
  • nc
    转换为
    int
    如下
    (int)nc
  • 它也将计算
    '\n'

    或者如果您不想计算“\n”

    #include <stdio.h>
    
    main()
    {
        double nc;
    
        for(nc=0; getchar()!=EOF; ++nc);
        printf("%1d\n",nc);
    }
    
    但是,该程序只接受输入,不显示值 这应该与字符的长度相关联。我是什么 不理解?我认为这本书在未来的发展中有更大的机会 比我对,所以我想我在哪里出了问题

    for循环仅在标准输入信号EOF时结束。这通常可以在Linux上通过
    Ctrl+d
    完成。对于其他操作系统,您需要找到挂件

    for循环结束后,读取的字符数将显示在标准输出上

    备注:
    nc
    应为整数。
    printf
    函数的格式字符串足够
    %d

    格式化源代码可以帮助您更容易理解。请注意,for循环不包含
    printf
    (正如您可能已经假设的那样)

    #包括
    main()
    {
    int nc;
    对于(nc=0;getchar()!=EOF;++nc)
    ;
    printf(“%d\n”,nc);
    }
    
    但是,该程序只接受输入,不显示值 这应该与字符的长度相关联。我是什么 不理解?我认为这本书在未来的发展中有更大的机会 比我对,所以我想我在哪里出了问题

    for循环仅在标准输入信号EOF时结束。这通常可以在Linux上通过
    Ctrl+d
    完成。对于其他操作系统,您需要找到挂件

    for循环结束后,读取的字符数将显示在标准输出上

    备注:
    nc
    应为整数。
    printf
    函数的格式字符串足够
    %d

    格式化源代码可以帮助您更容易理解。请注意,for循环不包含
    printf
    (正如您可能已经假设的那样)

    #包括
    main()
    {
    int nc;
    对于(nc=0;getchar()!=EOF;++nc)
    ;
    printf(“%d\n”,nc);
    }
    
    程序会一直读取输入,直到输入结束。如果在终端上键入,则需要了解如何发出输入结束的信号。在Windows上,按Ctrl+Z,然后按Enter键。在类Unix系统(Linux、macOS等)上,按行开头的Ctrl+D。或者,让程序从文件中读取:在Windows命令行上,运行
    myprogram.exe程序将一直读取输入,直到输入结束。如果在终端上键入,则需要了解如何发出输入结束的信号。在Windows上,按Ctrl+Z,然后按Enter键。在类Unix系统(Linux、macOS等)上,按行开头的Ctrl+D。或者,让程序从文件中读取:在Windows命令行上,运行
    myprogram.exe,对于
    double
    ,使用
    %.0f
    而不是
    %1d
    。或者更改
    nc
    的类型。K&R手册很棒,但很旧,它与现代C不符。
    main()
    不再是有效的C,请始终使用
    int main()
    。现在谈谈你的问题。你认为什么时候
    getchar()
    会等于
    EOF
    ?你认为你需要为此做些特别的事情吗?“如果你不知道,很可能你永远都打不到EOF。”风向标,好吧,现在我明白了。我以为他们想在每次迭代时输出
    nc
    。@n.m.
    intmain(void)
    ;)此外,您为什么使用
    双重计数?你数过1.0只羊,2.0只羊,3.0只羊吗?使用
    %1d
    打印
    double`是不正确的,您的程序很可能会显示不正确的结果。使用
    int
    代替。对于
    双精度
    ,使用
    %.0f
    代替
    %1d
    。或者更改
    nc
    的类型。K&R手册很棒,但很旧,它与现代C不符。
    main()
    不再是有效的C,请始终使用
    int main()
    。现在谈谈你的问题。你认为什么时候
    getchar()
    会等于
    EOF
    ?你认为你需要为此做些特别的事情吗?“如果你不知道,很可能你永远都打不到EOF。”风向标,好吧,现在我明白了。我以为他们想在每次迭代时输出
    nc
    。@n.m.
    intmain(void)
    ;)此外,您为什么使用
    双重计数?你会数1.0只羊,2.0只羊吗
    
    #include <stdio.h>
    
    main()
    {
        int nc;
        for(nc=0; getchar()!=EOF; ++nc)
             ;
        printf("%d\n",nc);
    }
    
    int nc;
    …
    printf("%d\n", nc);
    
    long nc;
    …
    printf("%ld\n", nc);
    
    double nc;
    …
    printf("%f\n", nc);
    
    aliman.c:3:1: warning: return type defaults to ‘int’ [-Wreturn-type]
     main()
     ^
    aliman.c: In function ‘main’:
    aliman.c:9:5: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘double’ [-Wformat=]
         printf("%1d\n",nc);
         ^
    aliman.c:13:1: warning: control reaches end of non-void function [-Wreturn-type]
     }
     ^