C语言scanf容易引发的bug
int hoge;
char buf[256];
printf("&hoge %p\n", &hoge);
//(1)
fgets(buf, sizeof(buf), stdin);
sscanf(buf, "%d", &hoge);
//(2)
scanf("%d", &hoge);
- 在使用scanf时,如果输入的格式和scanf中规定的格式不一样的时候,scanf函数会返回-1,未识别的格式会停留在输入流中。
有的人会使用fflush(stdin)来处理这种情况,其实这样是错误的。在老版的C语言中fflush是不支持对stdin的处理的,在最新的C++标准中,fflush也可以对stdin刷新缓存了
本文讨论了C语言中使用scanf函数时可能遇到的问题,特别是当输入格式与规定格式不符时,函数返回-1并使未识别格式留在输入流中。文章还提到了使用fflush(stdin)处理这种情况的误区。

1174

被折叠的 条评论
为什么被折叠?



