scanf()后用gets()出现跳过……求详细的解释……
scanf()后用getchar()把回车吃掉可以解决……我想知道为什么。求scanf()的具体原理啊~为什么缓冲区里的回车会保留?呵呵,还不是很明白啊……为什么就只有s...
scanf()后用getchar()把回车吃掉可以解决……我想知道为什么。求scanf()的具体原理啊~
为什么缓冲区里的回车会保留?
呵呵,还不是很明白啊……为什么就只有sanf()里输入的回车会被gets()接受呢?为什么那最后一个字符——回车会被保留在缓冲区呢?之前的字符都没传递给gets()。只有回车会被下面接受。我想知道scanf()函数的运行原理(在输入字符串时)~ 展开
为什么缓冲区里的回车会保留?
呵呵,还不是很明白啊……为什么就只有sanf()里输入的回车会被gets()接受呢?为什么那最后一个字符——回车会被保留在缓冲区呢?之前的字符都没传递给gets()。只有回车会被下面接受。我想知道scanf()函数的运行原理(在输入字符串时)~ 展开
2个回答
展开全部
缓冲区里保留所有从键盘打入的键,包括空格,空白键,回车。
输入语句 scanf(),gets(), ...都是到 缓冲区 里 按语法规则 读东西,转换内容。
当 缓冲区 里 内容 用完了,或不够 输入语旁带句 用 时,输入语句 等待....。
从键盘打入的东西,只有当遇到 Enter 键 时,才 通过 操作系统 进 缓冲区,没遇到 Enter 键不进 (或者说scanf(),gets(), 等语句,没遇到 Enter 键输入事件发生时,不开始工作)。
空白和回车何时被用掉与读语句种类和读法读的格式有关。
gets() 是读一行字符串,包括在前在后在半当中的 空格,空白,....
scanf("%d",&k); 和 scanf("%d\n",&k); 不同。后者可以吃掉一个 Enter 键。
简单保险的办法是用 fflush(stdin); 清除 输入缓冲区。你就 不用担心 输入行运枯芦 残留 的数字,字符,空白败厅和Enter 键:
scanf(。。。); fflush(stdin); 再 gets();
输入语句 scanf(),gets(), ...都是到 缓冲区 里 按语法规则 读东西,转换内容。
当 缓冲区 里 内容 用完了,或不够 输入语旁带句 用 时,输入语句 等待....。
从键盘打入的东西,只有当遇到 Enter 键 时,才 通过 操作系统 进 缓冲区,没遇到 Enter 键不进 (或者说scanf(),gets(), 等语句,没遇到 Enter 键输入事件发生时,不开始工作)。
空白和回车何时被用掉与读语句种类和读法读的格式有关。
gets() 是读一行字符串,包括在前在后在半当中的 空格,空白,....
scanf("%d",&k); 和 scanf("%d\n",&k); 不同。后者可以吃掉一个 Enter 键。
简单保险的办法是用 fflush(stdin); 清除 输入缓冲区。你就 不用担心 输入行运枯芦 残留 的数字,字符,空白败厅和Enter 键:
scanf(。。。); fflush(stdin); 再 gets();
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询