getchar() 和 gets() 函数为什么要一起用??

printf("\ninput No. : "); // " 输入号码 "
scanf("%d", & num[i]); // 从键盘输入 数组 num[] 的 1 个元素 ( 即 职工的 职工号 )
printf("input name: "); // " 输入姓名 "
getchar(); // getchar() 函数: 输入一个字符
gets(name[i]); // gets() 函数: 从终端输入一个字符串到字符数组

这段代码是 先输入一个号码: scanf( ), 接着输入 姓名如: Wang, 但必须先用getchar( )函数再用 gets( ) 函数才能正常输入 姓名, 如果只用一个 就 无法输入, 为什么?? 请大家帮忙,谢谢!!

这里getchar是处理 前面输入号码后的回车符的问题。
如果没有这个getchar,那scanf后,会有一个回车符存在输入流的缓冲区内,那么再使用gets的时候,就会取得这个回车符,gets认为输入结束,就不会让用户输入姓名了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-03
这个是因为输入缓冲区在输入完职工号后要求回车会产生一个换行符('\n'),在对字符或字符串进行输入时候(例如scanf("%c"),gets()...)会把这个换行符当作有效字符读入,所以造成还没输入姓名就跳过gets(name[i])而执行其它语句.getchar()的目的将多余的换行符吸收,无其它意义
或者将getchar()换成fflush(stdin)可以达到相同目的
第2个回答  推荐于2017-10-08
1、getline() // 接受一个字符串,可以接收空格并输出,需包含“#include”
#include
#include
using namespace std;
main ()
{
string str;
getline(cin,str);
cout<}
输入:jkljkljkl
输出:jkljkljkl
输入:jkl jfksldfj jklsjfl
输出:jkl jfksldfj jklsjfl
和cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数
2、gets() // 接受一个字符串,可以接收空格并输出,需包含“#include”
#include
#include
using namespace std;
main ()
{
char m[20];
gets(m); //不能写成m=gets();
cout<}
输入:jkljkljkl
输出:jkljkljkl
输入:jkl jkl jkl
输出:jkl jkl jkl
第3个回答  2011-09-03
输入num后,有个回车
getchar是过滤掉回车
相似回答