文件输入输出

重定向方式

使用>和<做输出输入重定向.假设有这样一个程序(可执行程序名:test):

#include<stdio.h>

int main(void){
    int num = 0;
    scanf("%d",&num);
    int cnt = 1;
    while(num/10 != 0){
        num /= 10;
        cnt++;
    }
    printf("这个数有%d位\n",cnt);
    return 0;
}

如果我们想将输出结果存在result.txt文件中,可以:

./test > result.txt
123

result.txt:

这个数有3位

如果我们想从一个input.txt文件输入,可以:

input.txt:

123
./test < input.txt
这个数有3位

FILE

stdio.h中,声明了一种类型FILE(一种结构,里面包含了打开文件的一些信息).

可以使用fopen()来打开一个文件.他的用法如下:

FILE *xxx = fopen("文件名","打开方式");
打开方式 含义
r 只读,从文件头开始
r+ 读且可写,从文件头开始
w 只写,不存在则新建,存在则清空原有内容
w+ 写且可读,不存在则新建,存在则清空原有内容
a 追加,不存在则新建,存在则在文件尾追加
x 只新建,如果文件存在则不能打开(与w和w+配合使用可以保护文件不被破坏)

打开文件后可以使用fscanf()来做输入.

fscanf(文件指针,"输入格式",参数表);

使用fprintf()来做输出.

fprintf(文件指针,"输出格式",参数表);

使用完文件后,记得用fclose()来关闭文件.

fclose(文件指针);

下面是一个示例程序:

#include<stdio.h>
typedef struct _studentInfo{
    char name[20];
    char sex[3];
    int age;
} stuInfo;
int main(void){
    FILE *db = fopen("studentInfo.db","w");
    int n = 0;
    scanf("%d",&n);
    stuInfo list[n];
    int cnt = 0;
    while(n--){
        printf("请输入第%d个学生的信息:\n",cnt+1);
        printf("%10s\n","姓名:");
        scanf("%s",list[cnt].name);
        getchar();
        printf("%10s\n","性别:");
        scanf("%s",list[cnt].sex);
        printf("%10s\n","年龄:");
        scanf("%d",&list[cnt].age);
        fprintf(db,"姓名:%s|性别:%s|年龄:%d\n",\
                list[cnt].name,list[cnt].sex,list[cnt].age);
        cnt++;
    }
    fclose(db);
    return 0;
}

输入:

2
请输入第1个学生的信息:
   姓名:
orzmiku
   性别:
+  
   年龄:
18
请输入第2个学生的信息:
   姓名:
dzoer
   性别:
+
   年龄:
15

输出 (studentInfo.db) :

orzmiku@MikuNet(~/Study/文件)$ cat studentInfo.db
姓名:orzmiku|性别:+|年龄:18
姓名:dzoer|性别:+|年龄:15

二进制文件

可以使用fread和fwrite对二进制文件进行操作.

fwrite 和 fread函数的用法小结 | 菜鸟教程 (runoob.com)

最后修改:2023 年 04 月 28 日
如果觉得我的文章对你有用,请随意赞赏