scanf后用getchar缓存问题.

来源:百度知道 编辑:UC知道 时间:2024/05/09 06:33:08
scanf("%d",&n);
if(n==1)add(member,memcount);

然后函数里面是这样
printf("\n请输入姓名:");
gets(name);
printf("\n请输入电话:");
gets(number);

为什么我输入1 然后出现的是
请输入姓名:
请输入电话:

正常输入1应该是 请输入姓名:
然后我输入完姓名后才出现电话的...

但是如果我在scanf后面+一个getchar();或者fflush(stdin);
就好了 这是为什么?
那scanf结束的标志是什么呢?

你输入 到缓冲区的有 "1\n" 但是 scanf("%d",&n); 只会读取 "1"
回车还在缓冲区中, 接着你的 gets() 函数 就会 读取缓冲区直到遇到 回车 为止 ,所以第一个 gets() 刚好把留下的 回车 读走了。。。
然后就是后面发生的事了。

这个和具体的输入内容相关
%s 的话,读取缓冲区直到 空格回车等空白字符,同时会把这个空白字符清除
%d,%f的话,读取缓冲区 直到 非数字,但是不会清除后面的这些字符