网站开发免费,暴雪公司现状,品牌标志设计的风格包括,重庆住房城乡建设厅网站首页scanf在C语言学习中比较常用#xff0c;但因为其涉及屏幕缓冲区导致有的时候会调入陷阱#xff0c;下面分享一下常见的需要注意的事项#xff1a;
1.输入末尾带有回车\n
当我们输入数据后#xff0c;最后按下回车时#xff0c;屏幕缓冲区的末尾都会含有这个字符 scanf的…scanf在C语言学习中比较常用但因为其涉及屏幕缓冲区导致有的时候会调入陷阱下面分享一下常见的需要注意的事项
1.输入末尾带有回车\n
当我们输入数据后最后按下回车时屏幕缓冲区的末尾都会含有这个字符 scanf的返回值是成功读取的变量个数正常情况下这个数量等于占位符的数量 2.读取时的匹配规则
scanf会根据占位符的类型到缓冲区去取相应的数据其中%c什么都能取包括空格等符号 如果在%c前加了空格就会跳过这些空格读取第一个字符 其中因为%c前面没有空格所以a把空格读走了引发后续错误 %s跳过空格开始读遇到空格停止这里很容易被坑。要读取空格建议使用gets 当读到占位符不匹配的类型时会自动停止读取由下一个继续 如果当前匹配不成功会直接中断读取后续的占位符不会起到作用 3.回车换行是\n回车不换行是\r
我们输入数据后敲的回车都是\n相当于光标换行并回到起始位置而\r只是回到起始位置如果进行后续操作会进行覆盖 4.返回值EOF和0的区别
EOF特指读取错误不好验证和文件末尾一般在读取文件时用它来判定
在控制台中如果用EOF来作为循环条件的话那么程序会被卡住因为scanf会一直等我们输入这个时候用0作为返回值的循环条件更好因为下一个循环如果读不到想要的值scanf的返回值就是0这个时候循环就结束了。 在循环读取时scanf会跳过每次按的\n回车所以这里不会因为\n不匹配%d而中断
5.用getchar清空缓冲区
用getchar写一个循环可以帮助我们清除\n防止后续程序出错 这里看到不清空的话%c会直接读走\n