鱼C论坛

 找回密码
 立即注册
查看: 1147|回复: 5

[已解决]如何理解这个程序

[复制链接]
发表于 2020-11-17 10:47:29 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>

void main()
{
        int c ,nb, nt ,nl;
        nb=nt=nl=0;
        while((c=getchar())!=EOF)
        {
                if(c==' ')
                {
                        ++nb;
                }
                if(c=='\t')
                {
                        ++nt;
                }
                if(c=='\n')
                {
                        ++nl;
                }
        }
        printf("%d, %d, %d\n", nb, nt, nl);
}
//    运行结果:我输入空格回车这些没任何显示,按F6显示ZZZZ。
最佳答案
2020-11-17 11:24:23
HWitty 发表于 2020-11-17 11:07
那我输入空格回车这些,并没有显示个数啊

getchar() 函数是把键盘输入保存在缓冲区中。
接收到回车键后才会继续往下执行。
getchar()是一个独占函数,进去了就出不来,除非输入回车。
按ctrl+C后会导致循环结束。
所以不建议用getchar,也不建议用EOF作为循环结束标志。
QQ图片20201117104613.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-17 10:50:42 | 显示全部楼层
EOF是 ctrl+c
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-17 11:07:42 | 显示全部楼层

那我输入空格回车这些,并没有显示个数啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-17 11:23:01 | 显示全部楼层
本帖最后由 jackz007 于 2020-11-17 11:24 编辑

        光按 Ctrl-Z 不行,还得按下回车键。
        按下 F6 后,再按下回车键效果也是一样的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-17 11:24:23 | 显示全部楼层    本楼为最佳答案   
HWitty 发表于 2020-11-17 11:07
那我输入空格回车这些,并没有显示个数啊

getchar() 函数是把键盘输入保存在缓冲区中。
接收到回车键后才会继续往下执行。
getchar()是一个独占函数,进去了就出不来,除非输入回车。
按ctrl+C后会导致循环结束。
所以不建议用getchar,也不建议用EOF作为循环结束标志。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-17 11:43:32 | 显示全部楼层
代码可以这样写,按ESC退出
#include<stdio.h>
#include <conio.h>
#include <stdio.h>

#define  ESCAPE        (27)

void main()
{
        int c ,nb, nt ,nl;
        nb=nt=nl=0;

        while(!kbhit())
        {
                
                c=getch();

                if(c==ESCAPE)
                {
                        break;
                }

                if(c==' ')
                {
                        ++nb;
                }
                if(c=='\t')
                {
                        ++nt;
                }
                if(c=='\r')
                {
                        ++nl;
                        printf("\n");
                }
                printf("%c",c);
        }
        printf("%d, %d, %d\n", nb, nt, nl);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 13:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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