• 【C语言学习】《C Primer Plus》第13章 文件输入/输出


     

    学习总结

     

    1、文件函数原型1:

    FILE* fopen(char *filename, char *openmode);  //打开文件,返回文件指针

    filename:文件名,更确切地说,是包含文件名的字符串地址;

    openmode:打开模式(r,w,a,r+,w+,a+,……

    打开失败返回NULL

     

    int getc(FILE *fp);  //读文件,返回字符

    fp:读取文件指针

     

    int putc(int ch, FILE *fp);  //写文件,返回写入字符的ASCII

    ch:字符

    fp:写入文件指针

     

    int fclose(FILE *fp);  //关闭文件,返回写入0则代表成功

    fp:关闭文件指针

     

    例子:

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 int main(int argc, char *argv[])
     4 {
     5         int ch;
     6         FILE *fp;
     7 
     8         if(argc != 2)
     9         {
    10                 printf("error params!
    ");
    11                 exit(1);
    12         }
    13 
    14         fp = fopen(argv[1],"r");
    15 
    16         if(fp == NULL)
    17         {
    18                 printf("can not open file!
    ");
    19                 exit(1);
    20         }
    21 
    22         while((ch = getc(fp)) != EOF)
    23         {
    24                 putc(ch,stdout);
    25         }
    26 
    27         if(fclose(fp) != 0){
    28                 printf("file close error!");
    29         }else{
    30                 printf("read file over!
    ");
    31         }
    32 
    33         return 0;
    34 }

    2、文件函数原型2:

    int printf( const char *format , [,argument,...]);  //格式化输出,返回输出字符个数

    *format:字符常指针

    :变长变量

     

    int scanf(char *format[,argument,...]);  //格式化输入,返回成功赋值的数据项数

    *format:字符常指针

    [,argument,...]:变长变量

    读到文件末尾出错时则返回EOF

     

    int fprintf(FILE *fp, const char *format , [,argument,...]);  //格式化输出,返回输出字符个数

    fp:输出到目标文件的文件指针

    *format:字符常指针

    [,argument,...]:变长变量

    与printf的区别缺少指定目标文件指针,printf默认输出到stdout

     

    int fscanf(FILE *fp , char *format[,argument,...]);  //格式化输入,返回成功赋值的数据项数

    fp:输入来源的文件指针

    *format:字符常指针

    [,argument,...]:变长变量

    与scanf的区别缺少指定目标文件指针,scanf默认从stdin获取数据来源

     

    例子:

     1 #include <stdio.h>
     2 #include <string.h>
     3 #define LEN 40
     4 
     5 int main(int argc, char *argv[])
     6 {
     7         char str[LEN];
     8 
     9         fscanf(stdin, "%s", str);
    10         while(strcmp(str,"quit") != 0)
    11         {
    12                 fprintf(stdout, "%s
    ", str);
    13                 fscanf(stdin, "%s", str);
    14         }
    15 
    16         return 0;
    17 }

    3、文件函数原型3:

    char *gets( char *buf );  //字符串标准输入,返回字符串指针,遇到回车则结束输入

    buf:存储输入地址

    与scanf字符串区别:scanf遇到空格、回车和Tab键都会认为输入结束; gets遇到回车认为输入结束。

     

    例子:

     1 #include<stdio.h>
     2 #define MAXLINE 10
     3 int main()
     4 {
     5         char str1[MAXLINE];
     6         char str2[MAXLINE];
     7 
     8         gets(str1);
     9         printf("%s
    ",str1);
    10 
    11         scanf("%s",str2);
    12         printf("%s
    ",str2);
    13 
    14         return 0;
    15 }

    执行结果:

    abc def

    abc def

    abc def

    abc

    int puts(char *buf);  //字符串标准输出,遇到‘’则停止输出,执行成功返回输出的字节数,执行失败返回EOF

    buf:输出字符串

    与printf字符区别:输出到字符串最后,puts会自动补’ ’,而printf不会

     

    例子:

     1 #include<stdio.h>
     2 int main()
     3 {
     4         char string[10] = {'a','b','c','d','
    ','e','f','','g',’h’};
     5         int a,b;
     6         a=puts(string);
     7         b=printf("%s",string);
     8         printf("
    puts retrun %d,printf return %d
    ",a,b);
     9         return 0;
    10 }

    执行结果:

    abcd

    ef

    abcd

    ef

    puts retrun 8,printf return 7

    char *fgets( char *buf, int max, char *fp);  //字符串标准输入,返回字符串指针,遇到换行符(包括换行符也读取)或比读取到最大长度少一个字符(因为会向字符串后添加‘’)或读取到文件最后则结束输入

    buf:存储输入地址

    max:输入字符串最大数

    fp:输入文件指针

     

    例子:

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #define MAXLINE 10
     4 int main() 
     5 {
     6         char line[MAXLINE];
     7         FILE *fp;
     8         int c=0;
     9 
    10         fp = fopen("abc","r");
    11 
    12         if(fp == NULL)
    13         {
    14                 printf("open file error!
    ");
    15                 exit(1);
    16         }
    17 
    18         while(fgets(line,MAXLINE,fp) != NULL)
    19         {
    20                 fputs(line,stdout);
    21                 printf("/");
    22                 c++;
    23         }
    24         printf("%d
    ",c);
    25         return 0;
    26 }

    执行结果:

    cat abc

    1234567890

    1234567891234567891234567

     

    000

    ./test

    123456789/0

    /123456789/123456789/1234567

    /

    /000

    /7

    int fputs(char *buf, FILE *fp);  //字符串文件输出,遇到‘’则停止输出,执行成功返回输出的字节数,执行失败返回EOF

    buf:输出字符串

    fp:输入文件指针

    与puts区别:fputs不会添加换行符

     

    例子:

    1 #include <stdio.h>
    2 int main()
    3 {
    4         char *str="abcdef g
    ";
    5         fputs(str,stdout);
    6         return 0;
    7 }

    执行结果:

    abcdef g

  • 相关阅读:
    iOS多线程_06_GCD其它用法
    iOS多线程_05_线程间通信NSThread/GCD
    iOS多线程_04_GCD
    iOS多线程_03_Block
    iOS多线程_02_多线程的安全问题
    iOS多线程_01_简介和NSThread
    shell 根据端口号输出所有的pid
    【java核心36讲】接口和抽象类的区别
    CSS布局
    CSS基础
  • 原文地址:https://www.cnblogs.com/wcd144140/p/4923560.html
Copyright © 2020-2023  润新知