C语言学习(8)—— 输入输出

 文件在程序中是以流的形式来操作的:(1)输入流:数据从数据源(文件)到程序(内存)的路径;(2)输出流:数据从程序(内存)到数据源(文件)的路径

一、屏幕输入输出

1. getchar() 和 putchar()

int getchar(void):从屏幕读取一个字符,并把它返回为一个整数,这个函数在同一个时间内只会读取一个单一的字符。在循环内使用这个方法,可以从屏幕上读取多个字符。

int putchar(int c):把一个字符输出到屏幕上,并返回相同的字符。这个函数在同一个时间内只会输出一个单一的字符。在循环内使用这个方法,可以在屏幕上输出多个字符。

#include<stdio.h>    

int main(){
    int c;

    printf("输入字符: ");  
    c = getchar();        // 输入字符: 2

    printf("输入的字符是: ");
    putchar(c);          //  输入的字符是: 2

    return 0;
}

2. gets() 和 puts()

char *gets(char *s):从屏幕读取一行到 s 所指向的缓冲区,直到该行结束。
int puts(const char *s):把字符串s和一个尾随的换行符输出到屏幕。

#include<stdio.h>    

int main(){
    char str[100];

    printf("输入字符串: ");  
    gets(str);               // 输入字符串: hello

    printf("输入的字符串是: ");
    puts(str);              // 输入的字符串是: hello

    return 0;
}

3. scanf() 和 printf()

int scanf(const char *format, ...) :从标准输入流 键盘上 读取输入,并根据提供的 format 来处理输入。
int printf(const char *format, ...) :把输出写入到标准输出流 屏幕上,并根据提供的format处理输出format :可以是一个简单的常量字符串,分别指定 %s、%d、%c、%f 等来输出或读取字符串、整数、字符或浮点数。

#include<stdio.h>    

int main(){
    char str[100];
    int i;

    printf("输入内容: ");  
    scanf("%s %d", str, &i);    // 输入内容: hello 2

    printf("str = %s, i = %d", str, i);   // str = hello, i = 2

    return 0;
}

二、文件输入输出

1、文件打开和关闭 

(1)fopen():创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型 FILE的一个对象,类型FILE包含了所有用来控制流的必要的信息。

FILE *fopen(const char *filename, const char *mode); 

说明:filename是字符串,用来命名文件,访问模式 mode 的值可以是 "r"、"w"、"a"、"r+"、"w+"、"a+",如果处理的是二进制文件(图片视频)则需使用以下访问模式 "rb"、"wb"、"ab"、"rb+"、"wb+"、"ab+"

r打开一个已有的文件,允许读取文件。如果文件不存在,不会创建一个新文件。
w打开一个文件,允许写入文件。如果文件不存在,则会创建一个新文件。程序会从文件的开头写入内容,如果文件已经存在,则会将原内容覆盖。
a打开一个文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。程序会在已有的文件内容后面追加新的内容。
r+打开一个已有的文件,允许读写文件。如果文件不存在,不会创建一个新文件。
w+打开一个文件,允许读写文件。如果文件不存在,则会创建一个新文件。程序会从文件的开头写入内容,如果文件已经存在,则会将原内容覆盖。
a+打开一个文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。程序在读文件时从文件开头开始读取,程序在写文件时会在已有的文件内容后面追加新的内容,

(2)fclose(): 关闭文件,读写完文件之后一定要关闭

int fclose( FILE *fp );

说明:如果成功关闭文件,fclose()函数返回 0,如果关闭文件时发生错误,函数返回 EOF,这个函数实际上会清空缓冲区中的数据,关闭文件,并释放用于该文件的所有内存。

2、文件读写

(1)写文件 

int fputc(int c, FILE *fp);

说明:函数 fputc() 把参数 c 的字符值写入到 fp 所指的输出流中。如果写入成功,它会返回写入的字符,如果发生错误,则会返回 EOF。

int fputs(const char *s, FILE *fp);

说明:函数 fputs()把字符串 s 写入到 fp 所指的输出流中。如果写入成功,它会返回一个非负值,如果发生错误,则会返回 EOF。

int fprintf(FILE *fp, const char *format,...)

说明:函数 fprintf() 把字符串 s 写入到 fp 所指的输出流中。

#include<stdio.h>    

int main(){
    // 创建文件指针
    FILE *fp = NULL;

    // 打开文件
    fp = fopen("file.txt", "w+");

    // 将内容写入文件(两种方式都可以)
    fputs("hello ", fp); 
    fprintf(fp, "world");

    // 关闭文件
    fclose(fp);


    fp = fopen("file.txt", "w+");    // w+会覆盖原内容
    fprintf(fp, "你好");             // 此时文件中只有:你好
    fclose(fp);

    return 0;
}

 (2)读文件 

int fgetc( FILE *fp );

说明:函数 fgetc() 从fp 所指向的文件中读取一个字符。返回值是读取的字符,如果发生错误则返回 EOF。

char *fgets( char *buf, int n, FILE *fp );
说明:函数 fgets() 从 fp 所指的输入流中读取 n-1个字符。它会把读取的字符串复制到缓冲区 buf中,并在最后追加一个 null 字符来终止字符串。如果这个函数在读取最后一个字符之前就遇到一个换行符\n或文件的末尾 EOF则只会返回读取到的字符,包括换行符。

int fscanf(FILE *fp, const char *format,...)

说明:函数 fscanf() 从 fp 所指的文件中读取字符串,但是在遇到第一个空格字符时,它会停止读取。

#include<stdio.h>    

int main(){
    // 创建文件指针
    FILE *fp = NULL;

    // 定义一个缓冲区
    char buff[1024];

    // 打开文件
    fp = fopen("file.txt", "r");        // 文件内容为: hello world1
                                        //            hello world2                   

    // 读取文件内容(方式一)
    fscanf(fp, "%s", buff);
    printf("%s \n", buff);              // hello

    // 关闭文件
    fclose(fp);



    // 读取文件内容(方式二)
    fp = fopen("file.txt", "r");
    fgets(buff, 1024, fp);
    printf("%s", buff);            // hello world1
    fclose(fp);



    // 读取整个文件的内容
    fp = fopen("file.txt", "r");
    while(fgets(buff, 1024, fp) != NULL){   // 通过while循环可以一行一行读取整个文件
        printf("%s", buff);
    }
    fclose(fp);

    return 0;
}
  • 19
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值