C语言文本文件的读取操作细节

本文详细探讨了C语言中的文件输入函数fgetc、fscanf、fgets和fread的工作原理,包括它们如何移动文件指针,何时停止读取以及格式控制的应用。特别强调了空格对不同函数行为的影响和正确使用这些函数进行数据读取的重要性。
摘要由CSDN通过智能技术生成

#include<stdio.h>

 

int fgetc(FILE *stream);

/* 1 */

//每执行成功一次,文件指针移动到下一个位置

 

/* 2 */

//f get c

//从指定文件中 得到 一个字符

 

/* 3 */

//函数返回值:

//情形1:读取到的字符的ASCII值

//情形2:如果读取到文件结束符EOF,则返回-1

 

int fscanf(FILE *stream,const char *format,...);

/* 1 */

//会移动文件指针

 

/* 2 */

//在什么时候停止执行?

//情形1:遇到空格、制表符、换行符

//情形2:读取到文件末尾

//情形3:读取完指定字符串

 

//当fscanf遇到格式字符串中指定的非空白字符(例如空格、制表符、换行符)时,它会停止读取并等待与格式指定符相匹配的字符。

//如果我们使用%s来读取一个字符串,fscanf会自动跳过前面的空白字符,但不会跳过字符串后面的空白字符,从而确保了字符串的完整读取。而当我们使用%c来读取一个字符时,fscanf不会跳过任何空白字符,这意味着它会将空格、制表符或换行符当作有效字符来处理。

//如果在fscanf格式控制字符串前面有空格,则fscanf函数会忽略输入缓冲区中的所有空白字符(包括空格、制表符和换行符),直到找到第一个非空白字符为止。因此,如果格式控制字符串前面有空格,它将跳过任何在输入缓冲区开头的空白字符,然后读取与格式控制字符串匹配的输入。

//fscanf(stdin, " %d", &num); 这里,格式控制字符串前面有一个空格。如果我们输入" 123"(注意输入字符串前有一个空格),则fscanf将跳过输入缓冲区开头的空白字符,并读取后面的数字123。如果我们没有在格式控制字符串前面加空格,则fscanf将尝试读取输入缓冲区中的所有字符,包括开头的空格,这可能导致错误或无法预测的行为。

//假设有一个文件内容为"Hello World", 我们使用%s格式指定符来读取,fscanf会读取"Hello"后遇到空格停止,并将"Hello"存储到指定的变量中。同样的内容,如果我们使用%c来读取字符,fscanf会逐个字符读取,包括空格和换行符,这样可能会导致意外的结果,因为通常我们不希望空格被当作有效字符处理。

//如果文件内容为"123 456", 我们使用%d来读取整数,fscanf会正确地读取123,然后遇到空格停止,不会将456错误地读入同一个整数变量中。

 

size_t fread(void *ptr, size_t size, size_t count, FILE *stream);

//注意会移动文件指针

 

char *fgets(char *str, int n, FILE *stram);

/* 1 */

//会移动文件指针

 

/* 2 */

//什么时候读取停止?

//第一种情况:读取了n-1个字符,存入str,自动停止读取,将'\0'添加到str的末尾

//第二种情况:遇到换行符、制表符,将换行符、制表符保存到str中,然后将'\0'添加到str的末尾

/*fgets函数遇到制表符或者换行符时会停止读取。如果下一次再次调用fgets函数,它会从输入缓冲区中读取剩下的内容。因此,如果想要读取包含制表符或换行符的整行文本,可以使用fgets函数。但是如果需要读取包含制表符或者换行符的文本段,就需要使用其他函数例如fread或者fgetc来实现。*/

 

 

/* 3 */

//返回值

//成功:返回指向str的指针

//失败:返回NULL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值