WarMj:键盘缓冲区残余信息问题

问题代码

int main()
{
    char str[128];
    char c;
    
    scanf("%s", str);\\第一个scanf
    scanf("%c", &c);\\第二个scanf
    
    system("pause");
    return (0);
}

如上,scanf("%c", &c);这句不可以正常接收字符,因为在scanf("%s", str);中敲下“Enter”键后,会向键盘缓冲区发送一个“\r”(回车)和一个“\n”(换行),“\r”(回车)被第一个scanf接收,“\n”(换行)被第二个scanf接收,直接赋给了c。

解决办法

在两个scanf中插入 fflush(stdin); 或者getchar(); getch();都可以。
其中后两者视情况而定,前者全部情况适用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容