C语言gets函数怎么回事

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define BOOKS 4
#define BORROWERS 10
struct book
{
int number;
char title[40];
int stock;

char bnam[BORROWERS][20];
int bnum[BORROWERS];
char bsex[BORROWERS];
char bcla[BORROWERS][20];
}book[BOOKS];
struct borrow
{
char name[20];
int number;
char sex;
char cla[20];
}borrow[BORROWERS];
void main()
{
FILE *fp;
int i;

printf("Input the information of the books:\n");

for(i=0;i<BOOKS;i++)
{
printf("Book(%d)\n\tnumber:\t%d\n\ttitle:\t",i+1,i+1);
gets(book[i].title);//这个地方只有当i=0是可输入,以后都直接跳过去了,这是为什么
printf("\tstock:\t");
scanf("%d",&book[i].stock);
}
for(i=0;i<BOOKS;i++)
{
printf("BOOK(%d)\n\tnumber:\t%d\n\ttitle:\t%s\n\tstock:\t%d\n",i+1,i+1,book[i].title,book[i].stock);
}
}

因为gets函数,这个函数会把回车当做字符,从而读入内存中
i=0时由于先出现gets,能够正常运行,由于后面的scanf函数,输入时会敲回车,这个回车就被当做字符输入到下一个gets 函数中了,所以下面就不能正常输入了
这是gets函数的性质
你可以在scanf函数后面再加个gets函数,用来接收scanf输入时要敲的回车
这样就不会影响后面的录入数据了
还有尽量不要用gets函数,它可能还有其他性质,如果不清楚就会影响程序的运行,还是用scanf吧
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-19
for(i=0;i<BOOKS;i++)
{
printf("Book(%d)\n\tnumber:\t%d\n\ttitle:\t",i+1,i+1);
gets(book[i].title);//这个地方只有当i=0是可输入,以后都直接跳过去了,这是为什么
printf("\tstock:\t");
scanf("%d",&book[i].stock); //这里输完的时候你按的回车,在下次循环的时候被gets读进去了
getchar(); //可以在这里加个函数来把回车用掉,下次循环就正常了
}
第2个回答  2012-07-19
gets(book[i].title); 从标准输入 读入 一行 字符串,包括空白,行结束回车。
如果缓冲区有残留的行,则读入 残留行: 字符串,包括空白,行结束回车。本回答被提问者采纳
第3个回答  2012-07-19
不想看,打酱油
第4个回答  2012-07-19
做任务
相似回答
大家正在搜