鱼C论坛

 找回密码
 立即注册
查看: 1948|回复: 9

[已解决]求大佬解惑

[复制链接]
发表于 2020-10-26 08:52:39 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>
int main()
{
        char a;
        
        while(a!='\n')
        {
        scanf("%c",&a);
        a=a+4;
        printf("%c",a);
        }
        return 0;
}
请问下大佬为什么每次输出时结果后面都会带一个方框,然后再按回车的话就会换行出现一个方框,自己在网上查原因的时候发现可能是没'\0'的原因,但是加了putchar('\0');还是这样,求解
最佳答案
2020-10-26 10:09:07
这是因为回车键被加密后输出的结果。我们在输入字符后,需要按下回车键进行确认,要知道回车键它也是字符,一样的会被加密并输出的。你可以在第8行与第9行之间加上一条语句来吸收这个回车键

scanf("%c",&a);
getchar();
a=a+4;

这样,你单个输入字符并确认时,那个像月字一样的字符就没有了;加上 getchar() 这样做的目的只是为了证明多输出的那个东东是回车键被加密并输出了,真正使用程序时,是不能这样做的 ! 因为这条语句会间隔一个就吸收你输入的字符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-26 09:04:59 | 显示全部楼层
字符型,不是所有的字符都可以屏幕显示的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-26 09:32:24 | 显示全部楼层
怎么编译的过的?我这边没有初始化编译都不能通过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-26 09:42:02 | 显示全部楼层
LuLD 发表于 2020-10-26 09:32
怎么编译的过的?我这边没有初始化编译都不能通过

语法上没有错误,只是在输出时,多输出了一个字符

我用 DEV 与VC++6.0 编译都能通过并输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-26 09:46:29 | 显示全部楼层
乐乐学编程 发表于 2020-10-26 09:42
语法上没有错误,只是在输出时,多输出了一个字符

我用 DEV 与VC++6.0 编译都能通过并输出

好吧,我用的是VS,编译的时候直接就报错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-26 10:09:07 | 显示全部楼层    本楼为最佳答案   
这是因为回车键被加密后输出的结果。我们在输入字符后,需要按下回车键进行确认,要知道回车键它也是字符,一样的会被加密并输出的。你可以在第8行与第9行之间加上一条语句来吸收这个回车键

scanf("%c",&a);
getchar();
a=a+4;

这样,你单个输入字符并确认时,那个像月字一样的字符就没有了;加上 getchar() 这样做的目的只是为了证明多输出的那个东东是回车键被加密并输出了,真正使用程序时,是不能这样做的 ! 因为这条语句会间隔一个就吸收你输入的字符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-27 15:01:44 | 显示全部楼层
本帖最后由 我惩戒辅助贼溜 于 2020-10-27 15:04 编辑
风过无痕1989 发表于 2020-10-26 10:09
这是因为回车键被加密后输出的结果。我们在输入字符后,需要按下回车键进行确认,要知道回车键它也是字符, ...

感谢解惑,可是当按回车时不时已经跳出while循环了吗,为什么回车仍然会被加密呢,以及想问一下在真正使用程序时应该怎么做
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-27 15:06:27 | 显示全部楼层
我惩戒辅助贼溜 发表于 2020-10-27 15:01
感谢解惑,可是当按回车时不时已经跳出while循环了吗,为什么回车仍然会被加密呢

按回车键不是跳出循环,而是输入完成了,可以开始循环了,然后循环地从缓冲区一个一个地读取键盘输入的字符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-27 15:41:23 | 显示全部楼层
风过无痕1989 发表于 2020-10-27 15:06
按回车键不是跳出循环,而是输入完成了,可以开始循环了,然后循环地从缓冲区一个一个地读取键盘输入的字 ...

可是我while语句的条件是a!='\n'呀,这样的话打回车不应该会不满足条件直接跳出循环嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-27 18:29:24 | 显示全部楼层
我惩戒辅助贼溜 发表于 2020-10-27 15:41
可是我while语句的条件是a!='\n'呀,这样的话打回车不应该会不满足条件直接跳出循环嘛

嗯,在循环体内,回车键作用就有两个了,一是确认输入完成,可以开始循环读取数据了,二是 while 读到了这个回车键,就跳出循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-10 21:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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