美文网首页
fgets函数和缓冲区示例

fgets函数和缓冲区示例

作者: 黄鹤的小姨子 | 来源:发表于2018-10-17 17:55 被阅读0次

fgets函数是gets函数的替代品,C11标准已经废除gets函数.

  • fgets函数的第2个参数, 它指明了读入字符的最大数量,一般传入数组的长度,如果该参数的值是n,那么fgets将读入包括换行符在内的n-1个字符,数组最后一个位置会自动存空字符'\0'.
  • fget的返回值为一个char *指针,指向输入的内容第一个字符

下面回显程序去掉了fgets读取的换行符,如果输入字符过多则丢弃

#include <stdio.h>
#define STLEN 10
int main(void)
{
    char words[STLEN];
    int i;
    
    puts("Enter strings (empty line to quit):");
    puts("------------------");        
    while (fgets(words, STLEN, stdin) != NULL
                          && words[0] != '\n')
    {   

        i = 0;
        while (words[i] != '\n' && words[i] != '\0')
            i++;
        if (words[i] == '\n')
        {
            printf("i = %u  replace \'\\n\'  to \'\\0\' \n",i);
            words[i] = '\0';
        }
        else // must have words[i] == '\0'
        {   
            printf("words[%u] == \'\\0\' \n",i);
            while (getchar() != '\n')// 获取缓冲区下一个字符
                // continue;//作用是丢弃剩余的字符
                puts("continue");
        }

        // for(int j=0;j<STLEN;j++){
        //     printf(" words[%d] to int is %u \n",j,words[j]);
        // }
        puts(words);
        puts("------------------");        
    }
    puts("done");
    return 0;
}

下面是程序的输出示例

Enter strings (empty line to quit):
------------------
12345678
words[8] replace '\n'  to '\0'
12345678

键盘输入12345678,那么包括回车换行符共向程序缓冲区输入了9个字符:12345678\n,fgets 全部获得.
则存在数组中的为10个字符:12345678\n'\0',然后替换成了12345678'\0''\0'
------------------
123456789
words[9] == '\0'
123456789

输入123456789\n, 缓冲区共10个字符, fgets获得9个字符,则存在数组中的为123456789'\0'
此时还有个换行符\n存在缓冲区,由getchar()取出,然后什么都不做进入下一轮主循环
------------------
1234567890
words[9] == '\0'
continue
123456789

输入1234567890\n, 缓冲区共11个字符, fgets获得9个字符,则存在数组中的为123456789'\0'
此时还有个0和换行符在缓冲区,getchar()先取出0打印continue然后取出换行符while结束,进入下一轮主循环
------------------

相关文章

  • fgets函数和缓冲区示例

    fgets函数是gets函数的替代品,C11标准已经废除gets函数. fgets函数的第2个参数, 它指明了读入...

  • 7.7行输入和行输出

    标准库提供了一个输入函数fgets,类似于前面的getline函数.库函数gets和puts的功能与fgets和f...

  • C语言字符串相关函数

    gets gets函数会保留空格,当输入回车时才认为输入完成。gets可能会有缓冲区溢出的危险。 fgets fg...

  • 遇到的 C 函数

    fgets 描述C 库函数 char *fgets(char *str, int n, FILE *stream)...

  • C语言实战开发篇-9 文件结构

    文件读写 字符读写函数 :fgetc和fputc字符串读写函数:fgets和fputs数据块读写函数:fre...

  • 20171002

    1.fgets(file,length)1 fgets() 函数从文件指针中读取一行。 file 必需。规定...

  • fgets

    函数原型 char *fgets(char *str, int n, FILE *stream); 参数 str-...

  • Android NDK开发之旅7--C语言基础--IO

    读写文本文件 主要用到了fgets和fputs两个函数(函数名中的s是指String,字符串的意思): _CRT_...

  • 11.2 字符串和字符串函数:fgets()函数

    fgets()函数的第二个参数指明了读入字符的最大数量,如果读到一个换行符,会把它存在字符串中,同时,fgets(...

  • swift——函数

    函数的定义和调用 1.函数的定义 示例代码: 2.函数的调用 示例代码 函数的参数和返回值 1.无参函数 尽管这个...

网友评论

      本文标题:fgets函数和缓冲区示例

      本文链接:https://www.haomeiwen.com/subject/ydhfzftx.html