嵌入式技术笔记(十一):C的标准输入输出和相关函数

stdio.h:C的标准输入输出:I/O(input output)

  1. stdout:输出流
  • 行缓冲:stdout在终端上进行输出的时候,输出的规则为每当出现换行符的时候进行一次刷新缓存,然后在进行操作(printf输出的时候,是看到换行符才进行输出)
  1. fopen()函数(C库的标准io函数
    fopen函数可以不用文件描述符

mode的种类及含义
r:只读
w:只写:如果文件不存在,创建一个新的;如果文件存在,清空原先文件的内容
a:追加:如果不存在,创建一个新的;如果文件存在,在文件末尾进行追加
r+:可读可写,文件不存在,打开失败
w+:包括w和r+
a+:包括a和r+

代码如下:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *fp;
    fp = fopen("./text.txt", "w+");
    if(NULL == fp)
    {
	puts("open error!");
	exit(1);
    }
    fclose(fp);

    return 0;
}

运行结果如下:
fopen函数运行结果

  1. fread和fwrite:
  • size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
  • size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream);

ptr:字符串指针
size:读取每个字符的大小
nmemb:读多少
stream:文件描述符指针

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    FILE *fp;
    fp = fopen("./text.txt", "w+");
    if(NULL == fp)
    {
	puts("open error!");
	exit(1);
    }

    char *str = "I am the little prince.\n";
    int num = fwrite(str, sizeof(char), strlen(str), fp);
    if(0 == num)
    {
	perror("fwrite!");
	fclose(fp);
	exit(1);
    }

    fclose(fp);
    return 0;
}

空的text.txt文件中写入“I am the prince.”,运行结果如下:
fwrite函数
将text.txt文件里的字符串写入字符型数组变量buffer[1024]中,代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    FILE *fp;
    fp = fopen("./text.txt", "w+");
    if(NULL == fp)
    {
	puts("open error!");
	exit(1);
    }

    char *str = "I am the little prince.\n";
    int num = fwrite(str, sizeof(char), strlen(str), fp);
    if(0 == num)
    {
	perror("fwreit!");
	fclose(fp);
	exit(1);
    }
    
    fseek(fp, 0, SEEK_SET);

    char buffer[1024] = {0};
    int num2 = fread(buffer, sizeof(char), 1024, fp);
    if(0 == num2)
    {
	perror("fread!");
	fclose(fp);
	exit(1);
    }
    printf("buffer:%s\n",buffer);
    fclose(fp);

    return 0;
}

运行结果如下:
fread函数

  1. 读字符家族
  • getc:从文件里读取一个字符
    getc(fp)
    返回值:当读到文件末尾无字符的时候,返回EOF(NULL)

  • fgetc:函数调用,效果和getc一样

  • getchar():从键盘读入字符
    作用:从stdin中读取一个字符。
    返回值:返回读取字符的ASCII值或者EOF字符或者出错值。

  1. 写字符的家族
    fputc:将某一字符写入文件流
    int fputc(int c, FILE *stream);
    int fputs(const char *s, FILE *stream);
    putc:(宏)输出一字符到指定流中。
    int putc(int c, FILE *stream);
    putchar:在屏幕上显示字符
    int putchar(int c);
    int puts(const char *s);

  2. printf系列

  • printf:
    int printf(const char *format, …);
  • fprintf:
    int fprintf(FILE *stream, const char *format, …);
    其中FILE *stream相当于stdout
    代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    FILE *fp;
    int c;
    int i = 10;
    int j = 20;
    
    fp = fopen("./text.txt", "w+");

    double l = 3.1415926;
    fprintf(fp, "%d %d %f\n", i, j, l );
    printf("\n");

    return 0;
}

运行结果如下: fprintf的运行结果

   int dprintf(int fd, const char *format, ...);
  • sprintf():往字符串里写字符串
    int sprintf(char *str, const char *format, …);
    代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char str[1024] = {0};
    int c;
    int i = 10;
    int j = 20;
    
    double l = 3.1415926;
    sprintf(str, "hello , my lady!\n%d,%d,%.7f\n", i, j, l);
    printf("%s", str);
    printf("\n");

    return 0;
}

运行结果如下:
在这里插入图片描述

   int snprintf(char *str, size_t size, const char *format, ...);
  1. scanf系列
    int scanf(const char *format, …);
  • fscanf():从文件流里写读字符串

     int fscanf(FILE *stream, const char *format, ...);
    
  • sscanf():从字符串读取变量
    int sscanf(const char *str, const char *format, …);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值