今天用scanf给一字符数组循环复制时遇到了问题
#include"stdio.h"
int main()
{
}
发现scanf会被跳过,搜了一下网
原来scanf(或者getchar)是从标准输入缓冲区中读取输入的数据,而%c的字符输入格式会接收回车字符,在输入第一个scanf(或者getchar)时输入字符后按回车结束,输入缓冲中保存了这个回车符,遇到第二个scanf(或者getchar)时,它自动把这个回车符赋给了ch2。而如果第二个scanf的输入格式不是%c时,由于格式不匹配,这个回车符会被自动忽略,所以只有在连续输入两个%c的格式时才会出现这样的问题!
解决方法
#include"stdio.h"
int main()
{
}
特别注意 方法2
C和C++的标准里从来没有定义过 fflush(stdin)。也许有人会说用 fflush(stdin) 解决不了这个问题,某些编译器(如VC6)支持用 fflush(stdin) 来清空输入缓冲,但是并非所有编译器都要支持这个功能(linux下的gcc就不支持,经我的GCC红帽5下测试),因为标准中根本没有定义 fflush(stdin)。