功能:读取整行输入并用空字符代替换行符,或者读取一部分输入,并丢弃其余部分。
函数本体:
char * s_gets(char *st, int n)
{
char * ret_val; //用于保存字符串的首地址
int i;
ret_val = fgets(st, n, stdin); //接收字符串的首地址
if(ret_val) //如果接收成功,执行if中的内容
{
while(st[i] != '\n', && st[i] != '\0') //找到换行符或空字符
{
i++;
}
if(st[i] == '\n') //如果是换行符,替换成结束符
{
st[i] = '\0';
}
else //如果是结束符,则丢弃多余的字符,包括换行符。
{
while(getchar() != '\n')
{
continue;
}
}
}
}
注:为什么要丢弃过长输入行中的余下字符?
因为输入行中多出来的字符会被留在缓冲区中,成为下一次读取语句的输入。如果下一条读取语句要读取的是double类型的值,就可能导致程序崩溃。丢弃输入行余下的字符保证了读取语句与键盘输入同步。