求助!getchar();gets();的问题!
/*输入10个职工的姓名和职工号,按职工号由小到大排序,姓名也随之调整*/
#include "stdio.h "
#include "string.h "
#define N 10
void main()
{
void input(int [],char name[][8]);
void sort(int [],char name[][8]);
int num[N],number;
char name[N][8];
input(num,name);
sort(num,name);
}
void input (int num[],char name[N][8])
{
int i;
for(i=0;i <N;i++)
{
printf( "\ninput No.: ");
scanf( "%d ",&num[i]);
printf( "input name: ");
getchar();
gets(name[i]);
}
}
void sort(int num[],char name[N][8])
{
int i,j,min,temp1;
char temp2[8];
for(i=0;i <N-1;i++)
{
min=i;
for(j=i;j <N;j++)
if(num[min]> num[j]) min=j;
temp1=num[i];
strcpy(temp2,name[i]);
num[i]=num[min];
strcpy(name[i],name[min]);
num[min]=temp1;
strcpy(name[min],temp2);
}
printf( "\n result:\n ");
for(i=0;i <N;i++)
printf( "\n%5d%10s ",num[i],name[i]);
}
问题1:input函数里头最后两句话,getchar();gets(name[i]);怎么解释?getchar()有什么用处啊?我总感觉没用,但是删了之后程序就有问题了!
[解决办法]
getchar()应该是过滤掉前面的输入数字后面的回车吧
不然gets()遇到 '\n '就会结束,这样name[i]就是空字符串
[解决办法]
一般在scanf ()语句后都会有一个getchar(),因为我们的习惯是输入数据后敲一下回车,这个回车也是输入的一个字符,并保存在输入缓冲区里,而这个回车符可能对后面的程序带来不必要麻烦。用getchar可以把它吃掉。