文件输入输出
重定向方式
使用>和<做输出输入重定向.假设有这样一个程序(可执行程序名: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对二进制文件进行操作.