我惩戒辅助贼溜 发表于 2020-10-26 08:52:39

求大佬解惑

#include<stdio.h>
int main()
{
        char a;
       
        while(a!='\n')
        {
        scanf("%c",&a);
        a=a+4;
        printf("%c",a);
        }
        return 0;
}
请问下大佬为什么每次输出时结果后面都会带一个方框,然后再按回车的话就会换行出现一个方框,自己在网上查原因的时候发现可能是没'\0'的原因,但是加了putchar('\0');还是这样,求解

wp231957 发表于 2020-10-26 09:04:59

字符型,不是所有的字符都可以屏幕显示的

LuLD 发表于 2020-10-26 09:32:24

怎么编译的过的?我这边没有初始化编译都不能通过

乐乐学编程 发表于 2020-10-26 09:42:02

LuLD 发表于 2020-10-26 09:32
怎么编译的过的?我这边没有初始化编译都不能通过

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

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

LuLD 发表于 2020-10-26 09:46:29

乐乐学编程 发表于 2020-10-26 09:42
语法上没有错误,只是在输出时,多输出了一个字符

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

好吧,我用的是VS,编译的时候直接就报错了

风过无痕1989 发表于 2020-10-26 10:09:07

这是因为回车键被加密后输出的结果。我们在输入字符后,需要按下回车键进行确认,要知道回车键它也是字符,一样的会被加密并输出的。你可以在第8行与第9行之间加上一条语句来吸收这个回车键

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

这样,你单个输入字符并确认时,那个像月字一样的字符就没有了;加上 getchar() 这样做的目的只是为了证明多输出的那个东东是回车键被加密并输出了,真正使用程序时,是不能这样做的 ! 因为这条语句会间隔一个就吸收你输入的字符

我惩戒辅助贼溜 发表于 2020-10-27 15:01:44

本帖最后由 我惩戒辅助贼溜 于 2020-10-27 15:04 编辑

风过无痕1989 发表于 2020-10-26 10:09
这是因为回车键被加密后输出的结果。我们在输入字符后,需要按下回车键进行确认,要知道回车键它也是字符, ...
感谢解惑,可是当按回车时不时已经跳出while循环了吗,为什么回车仍然会被加密呢,以及想问一下在真正使用程序时应该怎么做

风过无痕1989 发表于 2020-10-27 15:06:27

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

按回车键不是跳出循环,而是输入完成了,可以开始循环了,然后循环地从缓冲区一个一个地读取键盘输入的字符

我惩戒辅助贼溜 发表于 2020-10-27 15:41:23

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

可是我while语句的条件是a!='\n'呀,这样的话打回车不应该会不满足条件直接跳出循环嘛

风过无痕1989 发表于 2020-10-27 18:29:24

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

嗯,在循环体内,回车键作用就有两个了,一是确认输入完成,可以开始循环读取数据了,二是 while 读到了这个回车键,就跳出循环
页: [1]
查看完整版本: 求大佬解惑