ofthenewofc 2022-04-06 21:13 采纳率: 100%
浏览 21
已结题

关于#c语言#的问题,如何解决?

img


假如输入ACM但是它输出的不是A C M
但是单独运行就可以实现
希望告诉原因。

  • 写回答

2条回答 默认 最新

  • 一袭白衣梅子酒 2022-04-06 22:32
    关注

    scanf() 是带有缓冲区的。
    键盘输入的东西并没有直接给scanf读取 而是在缓冲区进行暂时存放。
    为scanf以回车键为信号,去缓冲区进行读取数据,只要数据的格式符合标准,那么就可以正确读取,否则就要等待继续输入/读取失败
    通过查阅资料我们知道了,scanf函数是标准输入流(从键盘接收数据),接收的数据放入输入缓冲区中,其中就包括在键盘输入的空格、回车这类字符,
    当你用%d接收时是不会影响的,但是用%c就会产生错误,这是因为在"%c"输入时,空格和转义字符均被视为有效字符会被%c接收。从而导致输出错误,无法AC
    一开始你输入20个字符,然后按回车键查看结果,此时缓冲区里面有回车键,你再输入ACM,缓冲区内的是回车键ACM回车键,但因为读取三位,所以读取的是回车键AC,打印出来是 A C,而不是A C M.
    你可以验证一下用scanf读取四个字符,但输入三个,就会发现打印出来是ACM了。

    img

    所以想要解决问题的话可以加个getchar();把缓冲区给清空。

    #include<stdio.h>
    int main()
    {
        char a[2];
        int i;
        char j, k, l;
    
        printf("请输入字符\n");
        
        for ( i = 0; i < 2; i++)
        {
            scanf("%c", &a[i]);
        }
    
        for  (i = 0; i < 2; i++)
        {
            printf("%c", a[i]);
        }
        printf("\n");
        getchar();
        scanf("%c%c%c", &j, &k, &l);
        printf("%c %c %c", j, k, l);
    
    
        return 0;
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月17日
  • 已采纳回答 4月9日
  • 创建了问题 4月6日