Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的字符计数_C - Fatal编程技术网

C语言中的字符计数

C语言中的字符计数,c,C,我刚开始编程,正在使用代码块编译器。使用此代码 long x = 0; while(getchar() != EOF){ ++x; } printf("%ld\n", x); 我试图计算输入的字符数,但每次我运行程序时,它都不会打印任何内容 然而,这个版本 long x = 0; while(getchar() != EOF){ ++x; printf("%ld\n", x); } 成功打印字符数,但另一方面,它统计每个字符(显示的是1、2、3、4,而不是4) 谢谢你

我刚开始编程,正在使用代码块编译器。使用此代码

long x = 0;

while(getchar() != EOF){
    ++x;
}

printf("%ld\n", x);
我试图计算输入的字符数,但每次我运行程序时,它都不会打印任何内容

然而,这个版本

long x = 0;

while(getchar() != EOF){
    ++x;

printf("%ld\n", x);
}
成功打印字符数,但另一方面,它统计每个字符(显示的是1、2、3、4,而不是4)


谢谢你的回答

您如何运行程序,以及如何提供输入?我的假设如下:

  • 您正在通过终端运行程序
  • 在按下ctrl+c键之前,程序实际上不会结束,您希望
  • 您通过键盘输入字符来提供输入

  • 如果这些是真的,则需要键入EOF字符(Windows上为ctrl+z,Mac上为ctrl+d,在其他unix上可能相同)。或者,您可以使用
    语法为程序提供一个文件。例如:
    /a.out

    您如何运行程序,以及如何提供输入?我的假设如下:

  • 您正在通过终端运行程序
  • 在按下ctrl+c键之前,程序实际上不会结束,您希望
  • 您通过键盘输入字符来提供输入

  • 如果这些是真的,则需要键入EOF字符(Windows上为ctrl+z,Mac上为ctrl+d,在其他unix上可能相同)。或者,您可以使用
    语法为程序提供一个文件。例如:
    /a.out

    实际上,您在while循环中使用的是EOF,意思是“文件结束”,它基本上是在您想要读取文本文件时使用的。 现在我向你们解释两个代码中发生了什么,然后我将告诉你们如何解决它

    第一个代码:

    long x = 0;
    
    while(getchar() != EOF){
       ++x;
    }
    
    printf("%ld\n", x);
    
    在这里,只要不发生EOF,您就可以从键盘获取输入,一旦发生EOF,循环将中断并执行printf(),但在这种情况下,不会发生EOF,因此不会打印任何内容

    第二个代码:

    long x = 0;
    
    while(getchar() != EOF){
       ++x;
    printf("%ld\n", x);
    }
    
    只要EOF没有发生,循环就会继续,并将继续打印x的值,因为printf()存在于while循环中,因此printf()将在循环迭代时执行多次

    解决方案: 将EOF替换为其他字符,如这样的空格

    long x = 0;
    
    while(getchar() != ' '){
        ++x;
    }
    
    printf("%ld\n", x);
    

    实际上,您在while循环中使用的是EOF,意思是“文件结束”,它基本上是在您想要读取文本文件时使用的。 现在我向你们解释两个代码中发生了什么,然后我将告诉你们如何解决它

    第一个代码:

    long x = 0;
    
    while(getchar() != EOF){
       ++x;
    }
    
    printf("%ld\n", x);
    
    在这里,只要不发生EOF,您就可以从键盘获取输入,一旦发生EOF,循环将中断并执行printf(),但在这种情况下,不会发生EOF,因此不会打印任何内容

    第二个代码:

    long x = 0;
    
    while(getchar() != EOF){
       ++x;
    printf("%ld\n", x);
    }
    
    只要EOF没有发生,循环就会继续,并将继续打印x的值,因为printf()存在于while循环中,因此printf()将在循环迭代时执行多次

    解决方案: 将EOF替换为其他字符,如这样的空格

    long x = 0;
    
    while(getchar() != ' '){
        ++x;
    }
    
    printf("%ld\n", x);
    

    运行程序时,控制台是否显示为一个单独的窗口,然后在发送EOF时关闭?如何发送
    EOF
    ?将
    EOF
    替换为
    '\n'
    。当您输入一些字符并按enter键时,它将打印正确的数字。EOF是文件的结尾。在行尾更改它,即“\n”。(忽略-我是盲人…)当您运行程序时,控制台是否显示为一个单独的窗口,然后在您发送EOF时关闭?如何发送
    EOF
    ?将
    EOF
    替换为
    。\n
    。当您输入一些字符并按enter键时,它将打印正确的数字。EOF是文件的结尾。在行尾更改它,即“\n”。(忽略-我是盲人..)值得注意的是,在Windows上,必须在行首键入Ctrl-Z,然后按Enter/Return,或者反复按Ctrl-Z(2-3次?)放弃行上的所有输入,改为发送EOF。在其他系统上,如果没有输入任何其他内容,只需按Ctrl-D键即可结束程序;不需要按回车键。否则,您必须反复按Ctrl-D键(可能2-3次)才能发送EOF。值得注意的是,在Windows上,您必须在行首键入Ctrl-Z,然后按Enter/Return,或者反复按Ctrl-Z键(2-3次?)放弃行中的所有输入,改为发送EOF。在其他系统上,如果没有输入任何其他内容,只需按Ctrl-D键即可结束程序;不需要按回车键。否则,您必须反复按Ctrl-D键(可能2-3次)才能发送EOF。哦,我明白了,我想不出这还不是文件的结尾,谢谢。我明白了,我想不出这还不是文件的结尾,谢谢