fputc和fgetc函数详解

349 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第26天,点击查看活动详情

大家好,我是芒果,一名非科班的在校大学生。对C/C++、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流

作者简介:

6.流

流:高度抽象的概念

printf -- 打印数据到屏幕上

scanf - 从键盘上读取数据


C语言的程序,只要运行起来,就默认打开了3个流:
    标准输出流: stdout
    标准输入流: stdin
    标准错误流: stderr
    这三个流都是FILE*类型
  • 标准输出流->stdout 即屏幕
  • 标准输入流->stdin 即键盘

7.文件的顺序读写

image-20220310223801320

这些函数都在#include<stdio,h>库函数里


image-20220310223807857


fputc - 每次写入一个字符

image-20220310223816357

  • 第一个参数:字符/字符对应的ASCII码值

  • 第二个参数:文件指针

  • 文件的打开方式为:写入


例子1:写到文件流中

int main()
{
    //打开文件
    FILE* pf = fopen("data.txt","w");
    if(NULL == pf)
    {
        perror("fopen");//打印错误信息
        return -1;
    }
    //写文件
    fputc('M',pf);
    fputc('a',pf);
    fputc('n',pf);
    fputc('g',pf);
    fputc('o',pf);
    
    //关闭文件
    fclose(pf);
    pf = NULL;
    return 0;
}

image-20220310223825270


image-20220310223833955

标志文件位置的指针pf在改变,每次写入一个字符,标志指针后移


例子2:写到标准输出流 - stdout - 屏幕

fputc不仅可以写到文件流,还可以写到标准输出流(屏幕)中

int main()
{
    fputc('M',stdout);
    fputc('M',stdout);
    fputc('M',stdout);
    return 0;
}

image-20220310223846346

相当于putchar,printf("%c\n",ch)


综上:fputc可以用于标准输出流也可以用于文件流,->所以适用于所有输出流


fgetc - 每次读取一个数据

image-20220310223853906

  • 参数:文件指针

  • 返回参数:int类型->字符对应的ascii码值

  • 文件的打开方式为:读取


现在txt文件中存放的:

image-20220310223900257


例子1:读取文件流

int main()
{
    //打开文件
    FILE* pf = fopen("data.txt","r");	//以只读方式打开
    //要进行判断是否打开成功
    if(NULL == pf)
    {
        perror("fopen");
        return -1;
    }
    //读文件
    int ch = fgetc(pf);
    printf("%c\n",ch);//M
    
     ch = fgetc(pf);
    printf("%c\n",ch);//a
    
     ch = fgetc(pf);
    printf("%c\n",ch);//n
    
    //关闭文件
    fclose(pf);
    pf = NULL;	//手动置空
    return 0;
}

执行结果:

image-20220310223910121


文件指针每读一次都发生变化。指针记录的是当前指向的字符, 一次读一个字符


例子2:读取标准输入流 - stdin -键盘

int main()
{
	int ch = fgetc(stdin);
    printf("%c\n",ch);

    ch = fgetc(stdin);
    printf("%c\n",ch);

    ch = fgetc(stdin);
    printf("%c\n",ch);
    return 0;
}

image-20220310223917045

从键盘上读取数据->相当于getchar,scanf("%c",&ch)