• C语言常用IO函数


    由于历史元素,C语言的IO函数很多,很容易混淆,在此总结一下。

    一、文件复制

    /**
     * Created by wangbin on 2022/1/11.
     * It works fine on linux but not on windows
     * fprintf和printf的区别是,printf是在向标准输出流stdout写数据,fprintf可以向它的第一个参数指定的流中写数据
     * scanf始终从标准输入流stdin读入数据,而fscanf从它的第一个参数所指定的流中读入数据
     * frepoen(const char *filename,const char *mode,FILE *fp)为一个打开的流附加一个文件,用于向文件追加数据
     * putchar()向标准输出流写一个字符
     * fputc()和putc()都是putchar()的更通用版本
     * getchar()从标准输入流读入一个字符
     * fgetc()和getc()从任意流读入字符
     * puts()想标准输出写入一个字符串,并加一个换行符
     * fputs()是puts()的更通用版本,可以向第二个参数指定的任意流写入一个字符串,不同在于fputs不会自动添加换行符
     * gets()从标准输入流读取一行,读到换行符为止,并抛弃换行符
     * fgets()从任意流读取信息,直到遇到换行符或参数指定的字符
     * fread、fwrite运行程序在单步中读写大的数据块
     *
    */
    
    #include <stdlib.h>
    #include <stdio.h>
    
    
    int main(int argc, char *argv[]) {
        FILE *src_file, *dest_file;
        int ch;
        if (argc != 3) {
            fprintf((FILE *) stderr, "usage fcopy source_file dest_file\n");
            printf("usage fcopy source_file dest_file");
            exit(EXIT_FAILURE);
        }
        if ((src_file = fopen(argv[1], "r")) == NULL) {
            fprintf((FILE *) stderr, "cannot open %s\n", argv[1]);
            printf("cannot open %s\n", argv[1]);
            exit(EXIT_FAILURE);
        }
        if ((dest_file = fopen(argv[2], "a")) == NULL) {
            fprintf((FILE *) stderr, "cannot open %s\n", argv[2]);
            printf("cannot open %s\n", argv[2]);
            fclose(src_file);
            exit(EXIT_FAILURE);
        }
        while ((ch = getc(src_file)) != EOF) {
            putc(ch, dest_file);
        }
        printf("success!");
        fclose(src_file);
        fclose(dest_file);
    
        return 0;
    }

    二、文件块读写

    /**
     * Created by wangbin on 2022/1/13.
     * Modifies a file of part records by setting quantity on_hand to zero for all records
     * fread、fwrite运行程序在单步中读写大的数据块
    */
    
    #include <stdio.h>
    #include <stdlib.h>
    
    #define NAME_LEN 5
    #define MAX_PARTS 10
    
    struct part {
        int number;
        char name[NAME_LEN + 1];
        int on_hand;
    } inventory[MAX_PARTS];
    
    int num_parts;
    
    int main(void) {
        FILE *fp;
        int i;
        if ((fp = fopen("invent.dat", "rb+")) == NULL) {
            fprintf(stderr, "Can't open inventory file\n");
            exit(EXIT_FAILURE);
        }
        //把文件内容读入数组。参数1:数组名;参数2:数组元素大小;参数3:数组元素数量;参数4:文件指针
        num_parts = fread(inventory, sizeof(struct part), MAX_PARTS, fp);
        for (i = 0; i < num_parts; i++) {
            inventory[i].on_hand = 0;
        }
        //将文件指针重新指导文件起始处
        rewind(fp);
        //参数1:数组地址;参数2:数组元素大小;参数3:要写的元素数量;参数4:文件指针
        fwrite(inventory, sizeof(struct part), num_parts, fp);
        fclose(fp);
        return 0;
    }
  • 相关阅读:
    codevs 1102 采药 2005年NOIP全国联赛普及组
    codevs 1058 合唱队形 2004年NOIP全国联赛提高组
    动归题目
    友好城市//未测,不知对错
    codevs 1044 拦截导弹 1999年NOIP全国联赛提高组
    codevs 5294 挖地雷
    codevs 1576 最长严格上升子序列
    [BZOJ3289]Mato的文件管理
    [CodeVS1299]切水果
    [TYVJ1473]校门外的树3
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/15798273.html
Copyright © 2020-2023  润新知