请问scanf 缓冲区问题

outpainfo 2010-08-29 04:45:49
#include<stdio.h>
#include<stdlib.h>
int main()
{
char buff[10];
int j;
printf("enter a num:");
while(scanf("%d",&j)==0)
{

gets(buff); /*这个和buf具体什么作用,怎么工作的?*/
printf("enter a num:");

}
printf("%d\n",j);
return 0;
}
...全文
125 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongshenlin 2010-08-29
  • 打赏
  • 举报
回复
如果对你有帮助的话,记得结贴!
hongshenlin 2010-08-29
  • 打赏
  • 举报
回复
while(scanf("%d",&j)==0)
{

gets(buff); /*这个和buf具体什么作用,怎么工作的?*/
printf("enter a num:");

}
scanf("%d",&j)语句是从缓冲区接收一个十进制整数。输入正确数据存放到变量表示的存储区中。同时scanf()函数返回一非零值。如果数据不正确,输入的数据仍然在缓冲区中。scanf()函数返回零值。
在你的程序中循环体执行的条件即是scanf()如果接受的是错误的数据则执行循环体,不是十进制数,那么肯定是字符。故用gets将字符串给接受了(缓冲区就没有内容了)并将接收的内容存放在数组buff中。这是程序本意。
但是实际上你的程序不能检查数据的正确性,具体为什么多验证几次不同的输入你就知道了。
十八道胡同 2010-08-29
  • 打赏
  • 举报
回复
对于gets函数 楼主可以参考http://topic.csdn.net/u/20100828/00/8523fb02-9ea2-49d8-abc5-0142faceb27b.html
wing_0706 2010-08-29
  • 打赏
  • 举报
回复
因为你scanf 要 回车结束。。
gets(buff); 可以接受回车。。 以及内存里 过多的东西。。
说不定你 你sanf输入时 多 输入的 东西 但是 没被接收。。

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧