C语言文件读取实例

文件操作函数

打开文件:fopen(文件名,使用文件方式)
关闭文件:fclose( fp )
文件读取:fgetc( fp )fgets(str, n, fp)fscanf(fp, 格式, 输入列表)fread(存储区指针, 单元大小, 个数, 文件指针)
文件写入:fputc( ch, fp )fputs(str, fp)fprintf(fp, 格式, 输出列表)fwrite(存储区指针, 单元大小, 个数, 文件指针)
其他:feof( fp )rewind( fp )fseek(fp, 偏移量, 起始点)

关于fopen:只读用“r”,只写用“w”,若后面要使用fread或fwrite,则用“rb”或“wb”
关于fgets:实际读入n-1个字符,并在str[n-1]处放入’\0’
关于fseek:偏移量为长整型,如"-10L"表示向后10个字节;起始点有三种,0表示文件开头,1表示当前位置,2表示文件结尾,例如想读入最后一个字节,可以这样定位:fseek(fp, -1L, 2)

对比记忆,标准输入输出:
标准输入:getchar(), gets(字符数组)
标准输出:putchar(ch)

情景一:每行是空格分隔的整数,且个数不确定(fgets例子)

示例文本:

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

参考程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100

int main(){
    //打开文件
    FILE *frp = fopen("D:\\in.txt", "r");
    if(frp==NULL){
        printf("cannot open file!\n");
        exit(1);
    }

    //读取文件并打印
    char str[N];
    while (!feof(frp))
    {
        fgets (str, N, frp);
        char *p;
        int num=0;
        //空格与回车都作为分隔符
        for (p = strtok(str, " \n"); p; p = strtok(NULL, " \n")) {
            //sscanf(p,"%d",&num);
            num=atoi(p);
            printf("%d ",num);//每行末尾会多个空格
        }
        printf("\n");//末尾多了个回车
    }

    //关闭文件
    fclose(frp);
    return 0;
}

结果截图:
截图

情景二:每行是空格分隔的整数,且第一个数字为该行剩下的数字个数(fscanf例子)

示例文本:

5 10 -20 2000 36 -100
3 -10 60 300
4 70 88 12 66

参考程序:

#include <stdio.h>
#include <stdlib.h>

int main(){
	/*打开文件*/
    FILE *frp=fopen("D:\\in.txt","r");
    if(frp==NULL){
        printf("cannot open file");
        exit(1);
    }
    /*读取文件并打印*/
    int len;
    while(!feof(frp)){
        len=0;
        fscanf(frp,"%d",&len);
        int *arr=(int *)malloc(sizeof(int)*len);
        for(int i=0;i<len;i++){
            fscanf(frp,"%d",arr+i);
        }
        for(int i=0;i<len;i++){
            printf("%d ",arr[i]);//每行末尾会多个空格
        }
        printf("\n");//末尾多了个回车
        free(arr);
    }
    /*关闭文件*/
    fclose(frp);
    return 0;
}

结果截图:
截图

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值