s_gets()函数 //自定义函数

功能:读取整行输入并用空字符代替换行符,或者读取一部分输入,并丢弃其余部分。

函数本体:

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类型的值,就可能导致程序崩溃。丢弃输入行余下的字符保证了读取语句与键盘输入同步。

猜你喜欢

转载自blog.csdn.net/qq_40732561/article/details/81163788