您好,登录后才能下订单哦!
这篇文章给大家分享的是有关C语言中scanf读取缓存区的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
首先我们要了解什么是 scanf 函数
根据 cplusplus.com的解释
scanf()函数是通用 终端格式化输入 函数,它从标准输入设备(键盘)
读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。 其调用格式为:
scanf("<格式化字符串>",<地址表>);
并且注意:scanf()函数返回成功赋值的数据项数,出错时则返回EOF。
当进一步深挖之后(暂时不需要知道原理,只需要知道结果即可),
可以得到这样一个认识:
键盘输入的东西并没有直接给scanf读取 而是在缓冲区进行暂时存放
比如这样一段代码:
#include <stdio.h> int main() { int a, b, c, d, e; scanf("%d %d %d %d", &a, &b, &c, &d); printf("%d %d %d %d\n", a, b, c, d); scanf("%d", &e); printf("%d\n", e); return 0; }
预期:1 2 3 4
1 2 3 4
5
5
但是如果你这样输入: 1 2 3 4 5
会输出 1 2 3 4
5
这是因为scanf以回车键为信号,去缓冲区进行读取数据,只要数据的格式符合标准,那么就可以正确读取,否则就要等待继续输入/读取失败
通过查阅网站我们知道了,scanf函数是标准输入流(从键盘接收数据),接收的数据放入输入缓冲区中,其中就包括在键盘输入的空格、回车这类字符,
但是!!!
当你用%d接收时是不会影响的,但是用%c就会产生错误,这是因为在"%c"输入时,空格和转义字符均被视为有效字符会被%c接收。从而导致输出错误,无法AC
1.List item
可以再%c前键入一个空格 (优解)
eg:scanf(" %c",&a);
这里 %c前面加上空格键 可以消除前面所有的空白字符(输入的时候就会消化掉这个\n) 从而 不需要使用getchar()去吞\n
并且不会为下次留下空白字符的隐患
2.使用getchar()去吞掉缓存区中的\n
while(ch=getchar()!=EOF) getchar();
使用getchar(); 去吞掉缓存区中剩余的 ‘\n' ,从而使程序可以正常运行
感谢各位的阅读!关于“C语言中scanf读取缓存区的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。