C 语言编程 — 输入/输出与文件操作

举报
云物互联 发表于 2021/08/06 01:20:03 2021/08/06
【摘要】 目录 文章目录 目录前文列表输入/输出scanf() 和 printf()getchar() 和 putchar() 文件操作打开文件关闭文件写入文件读取文件二进制 I/O 函数 前文列表 《程序编译流程与 GCC 编译器》 《C 语言编程 — 基本语法》 《C 语言编程 — 基本数据类型》 《C 语言编程 — 变量与常量》 《C 语言编程 —...

目录

前文列表

程序编译流程与 GCC 编译器
C 语言编程 — 基本语法
C 语言编程 — 基本数据类型
C 语言编程 — 变量与常量
C 语言编程 — 运算符
C 语言编程 — 逻辑控制语句
C 语言编程 — 函数
C 语言编程 — 高级数据类型 — 指针
C 语言编程 — 高级数据类型 — 数组
C 语言编程 — 高级数据类型 — 字符串
C 语言编程 — 高级数据类型 — 枚举
C 语言编程 — 高级数据类型 — 结构体与位域
C 语言编程 — 高级数据类型 — 共用体
C 语言编程 — 高级数据类型 — void 类型
C 语言编程 — 数据类型的别名
C 语言编程 — 数据类型转换
C 语言编程 — 宏定义与预处理器指令
C 语言编程 — 异常处理
C 语言编程 — 头文件

输入/输出

输入,意味着要向程序输入数据,可以是以文件的形式或从命令行中进行。
输出,意味着要在屏幕上、打印机上或任意文件中输出数据。

C 语言把所有的设备都当作文件。所以处理设备(e.g. 显示器)的输入/输出的方式与文件操作的方式相同。以下三个文件称之为标准输入/输出文件,会在程序执行时自动打开,以便访问键盘和屏幕。C 语言中常用的标准输入/输出函数在 stdio.h 头文件中声明。

在这里插入图片描述

注:文件指针是访问文件的入口。

scanf() 和 printf()

  • int scanf(const char *format, ...) 函数从标准输入流 stdin 读取输入,并根据提供的 format 来浏览输入。
  • int printf(const char *format, ...) 函数把输出写入到标准输出流 stdout ,并根据提供的格式产生输出。

format 可以是一个简单的常量字符串,可以分别指定 %s、%d、%c、%f 等来输出或读取字符串、整数、字符或浮点数类型数据。还有许多其他可用的格式选项,可以根据需要使用。

#include <stdio.h>

int main() { float f; printf("Enter a number: "); scanf("%f",&f); printf("Value = %f", f); return 0;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

getchar() 和 putchar()

  • int getchar(void) 函数从屏幕读取下一个可用的字符,并把它返回为一个整数。这个函数在同一个时间内只会读取一个单一的字符。可以在循环内使用这个方法,以便从屏幕上读取多个字符。
  • int putchar(int c) 函数把字符输出到屏幕上,并返回相同的字符。这个函数在同一个时间内只会输出一个字符。可以在循环内使用这个方法,以便在屏幕上输出多个字符。
#include <stdio.h>
 
int main() { int c; printf("Enter a value :"); c = getchar( ); printf("\nYou entered: "); putchar(c); printf("\n"); return 0;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

文件操作

常见的文件操作有创建、打开、关闭文本文件或二进制文件。一个文件,无论它是文本文件还是二进制文件,都是代表了一系列的字节。C 语言不仅提供了访问顶层的函数,也提供了操作系统的系统调用来处理存储设备上的文件。

打开文件

使用 fopen() 函数来创建一个新的文件或者打开一个已有的文件,这个函数调用会初始化并返回一个 FILE 类型变量,其包含了所有用来控制文件数据流的必要的信息。

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

  
 
  • 1
  • mode 类型
    在这里插入图片描述

如果处理的是二进制文件,则需使用下面的访问模式来替代:

"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"

  
 
  • 1

关闭文件

使用 fclose() 函数:

int fclose(FILE *fp);

  
 
  • 1

这个函数实际上会清空缓冲区中的数据,关闭文件,并释放用于该文件的所有内存。如果成功关闭文件,函数会返回整数零,如果关闭文件时发生错误,函数返回 EOF。EOF 是一个定义在头文件 stdio.h 中的常量。

写入文件

  • 函数 fputc() 把实参整型 c 的字符值写入到 fp 所指向的输出流中。如果写入成功,它会返回写入的字符,如果发生错误,则会返回 EOF。
int fputc(int c, FILE *fp);

  
 
  • 1
  • 函数 fputs() 把把一个以 null 结尾的字符串 s 写入到 fp 所指向的输出流中。如果写入成功,它会返回一个非负值,如果发生错误,则会返回 EOF。
int fputs(const char *s, FILE *fp);

  
 
  • 1
  • 还可以使用 fprintf() 函数来写把一个字符串写入到文件中。
int fprintf(FILE *fp,const char *format, ...)

  
 
  • 1

示例:

#include <stdio.h>

int main() { FILE *fp = NULL; fp = fopen("/tmp/test.txt", "w+"); fprintf(fp, "This is testing for fprintf...\n"); fputs("This is testing for fputs...\n", fp); fclose(fp); return 0;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

读取文件

  • 函数 fgetc() 从 fp 所指向的输入文件中读取一个字符。返回值是读取的字符,如果发生错误则返回 EOF。
int fgetc(FILE *fp);

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

  
 
  • 1
  • 可以使用 fscanf() 函数来从文件中读取字符串,但是在遇到第一个空格和换行符时,它会停止读取。
int fscanf(FILE *fp, const char *format, ...)

  
 
  • 1

示例:

#include <stdio.h>

int main() { FILE *fp = NULL; char buff[255]; fp = fopen("/tmp/test.txt", "r"); fscanf(fp, "%s", buff); printf("1: %s\n", buff); fgets(buff, 255, fp); printf("2: %s\n", buff); /* 使用显示的强制类型转换,实际上可忽略 */ fgets(buff, 255, (FILE*)fp); printf("3: %s\n", buff ); fclose(fp); return 0;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

运行:

$ ./main
1: This
2:  is testing for fprintf...

3: This is testing for fputs...

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

首先,fscanf() 函数只读取了 This,因为它在后边遇到了一个空格。其次,调用 fgets() 读取剩余的部分,直到行尾。最后,调用 fgets() 完整地读取第二行。

二进制 I/O 函数

size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file); size_t fwrite(const void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

文章来源: is-cloud.blog.csdn.net,作者:范桂飓,版权归原作者所有,如需转载,请联系作者。

原文链接:is-cloud.blog.csdn.net/article/details/105312774

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。