鱼C论坛

 找回密码
 立即注册
查看: 2044|回复: 2

[已解决]统计从键盘输入一行字符的个数

[复制链接]
发表于 2019-1-27 10:59:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我的代码是这样紫的
#include<stdio.h>
void main()
{
        int a=0;
        char ch;
        printf("请输入一行字符:");
        ch=getchar();
        while(ch!='\n')
        {
                a++;
        }
        printf("%d",a);
}
//运行出来没有结果显示
小甲鱼的代码是这样子的
#include<stdio.h>
void main()
{
        int a=0;
        printf("请输入一行字符:");
        getchar();
        while(getchar()!='\n')
        {
                a++;
        }
        printf("%d",a);
}



//我不知道错在哪里,getchar()还是没弄清楚本质
最佳答案
2019-1-27 11:10:55
本帖最后由 行客 于 2019-1-27 11:23 编辑

例子2中的
while(getchar()!='\n')
相当于连续的getchar()获取到值。

你的第一个例子,其实就getchar()了1次,相当于只获得了1次getchar()的结果。由于你只获得了1次getchar(),所以ch值不会发生变化,因此你程序执行,输入字符回车后,就进入无限循环。程序不报错,也不退出。

第二个例子也有问题,你注意下注释:
#include<stdio.h>
void main()
{
        int a=0;
        printf("请输入一行字符:");
        //getchar();        //这里不应该提前获取一个字符。如果不注释掉这句话,你的打印出的数字会少1。
        while(getchar()!='\n')
        {
                a++;
        }
        printf("%d\n",a);
}

另外,看看以下的说明加强理解吧:

头文件:#include <stdio.h>

函数getchar()用于从标准输入控制台读取字符,原型如下:
    int getchar(void);

【参数】该函数没有参数。

【返回值】函数的返回值为用户输入的第一个字符的ASCII码,若出错返回-1,且将用户输入的字符回显到屏幕。如果用户在按回车键之前输入了不只一个字符,其他字符会保留在键盘缓冲区中,等待后续getchar()调用读取。也就是说,后续的getchat()调用不会等待用户按键,而是直接读取缓冲区中的字符,直到缓冲区的字符读取完毕后,才等待用户按键。

【说明】getchar()非真正函数,而是getc(stdin)宏定义。

如有不明白的地方,请继续跟帖。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-27 11:10:55 | 显示全部楼层    本楼为最佳答案   
本帖最后由 行客 于 2019-1-27 11:23 编辑

例子2中的
while(getchar()!='\n')
相当于连续的getchar()获取到值。

你的第一个例子,其实就getchar()了1次,相当于只获得了1次getchar()的结果。由于你只获得了1次getchar(),所以ch值不会发生变化,因此你程序执行,输入字符回车后,就进入无限循环。程序不报错,也不退出。

第二个例子也有问题,你注意下注释:
#include<stdio.h>
void main()
{
        int a=0;
        printf("请输入一行字符:");
        //getchar();        //这里不应该提前获取一个字符。如果不注释掉这句话,你的打印出的数字会少1。
        while(getchar()!='\n')
        {
                a++;
        }
        printf("%d\n",a);
}

另外,看看以下的说明加强理解吧:

头文件:#include <stdio.h>

函数getchar()用于从标准输入控制台读取字符,原型如下:
    int getchar(void);

【参数】该函数没有参数。

【返回值】函数的返回值为用户输入的第一个字符的ASCII码,若出错返回-1,且将用户输入的字符回显到屏幕。如果用户在按回车键之前输入了不只一个字符,其他字符会保留在键盘缓冲区中,等待后续getchar()调用读取。也就是说,后续的getchat()调用不会等待用户按键,而是直接读取缓冲区中的字符,直到缓冲区的字符读取完毕后,才等待用户按键。

【说明】getchar()非真正函数,而是getc(stdin)宏定义。

如有不明白的地方,请继续跟帖。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-27 11:41:43 | 显示全部楼层
行客 发表于 2019-1-27 11:10
例子2中的
while(getchar()!='\n')
相当于连续的getchar()获取到值。

蟹蟹你啦,懂了真的讲得很细心哦,谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 14:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表