C语言文件操作


 程序为什么需要文件?
1>配置
unix采用文本 Windows采用注册表二进制文件
2>媒体数据
存档在二进制文件中

还有很多用处


首先以标准的输入输出谈起~ 

(1)格式输入输出

printf("%[flag][width][.prec][hlL]type");

1>

flag 含义
- 左对齐
+ 允许显示正号
0 0填充

举例:

int main(){
  a = 123;   printf("-9%d",a);   printf("+9%d",a);   a = 123;   printf("+9%d",a);   printf("9%d",a);
  return 0;
}

屏幕上打印为

--------------------------
123
+123
-123
-123
--------------------------
2>

width或prec               含义
number               最小字符数
*                  下一个参数是字符数
.number          小数点后保留几位
.*            下一个参数是小数点后的位数
举例:
a = 123.4512;
printf("9.2%d",a);
printf("",a);
//9代表至少有九个字符,2后面保留的小数数位
屏幕上打印为
--------------------------
123.45

--------------------------

3>hlL修饰符
hh 单个字节
h short
l long
ll long long
L long double

4>type
显示类型
%d 整数类型
%f float
%o 八进制
%x 十六进制
e 指数
n 输入输出的个数
例如
printf("%nd",1234,&num) //num储存了输出的个数,在这个例子中是4
hh char
h short
l long double


(2)文件的操作

1>文件的打开与创建

用到fopen函数,先看一个例子

FILE *fp = fopen("12.in","r");
if(fp)
{	
    fscanf(fp,"%d",&num);
    fclose(fp);
}
else
{
    //文件打开是失败
}

 

FILE *fopen(char *pname,char *mode)

上述为函数原型,入口参数如下所示

pname:是一个字符指针,它将指向要打开或建立的文件的文件名字符串。
mode:是一个指向文件处理方式字符串的字符指针。所有可能的文件处理方式如下所示

----------------------------------

r 打开只读
r+ 打开读写,从文件开头开始
w 打开只写,文件不存在则新建,如果存在则清空
w+ 打开读写,文件不存在则新建,如果存在则清空
a 打开追加
..x 只新建,如果已经存在则无法打开

----------------------------------

返回值为状态:
正常返回:被打开文件的文件指针。
异常返回:NULL,表示打开操作不成功。

总结一下

打开文件的作用是:
(1)分配给打开文件一个FILE 类型的文件结构体变量,并将有关信息填入文件结构体变量;
(2)开辟一个缓冲区;
(3)调用操作系统提供的打开文件或建立新文件功能,打开或建立指定文件;

 2>文件的关闭

文件的关闭简单,就是利用fclose函数

int fclose(FILE *fp);

入口参数为文件指针,返回值为状态(正常为0,错误为EOF)

3>文件的读写操作

文件的读写有多种函数。

举一个例子,格式化读写。

格式化写

1.函数原型

int fprintf(FILE *fp,char *format,arg_list)

2.功能说明
  将变量表列(arg_list)中的数据,按照format指出的格式,写入由fp指定的文件。fprintf()函数与printf()函数的功能相同,只是printf()函数是将数据写入屏幕文件(stdout)。
3.入口参数说明
  fp:这是个文件指针,指出要将数据写入的文件。
  format:这是个指向字符串的字符指针,字符串中含有要写出数据的格式,所以该字符串成为格式串。格式串描述的规则与printf()函数中的格式串相同。
  arg_list:是要写入文件的变量表列,各变量之间用逗号分隔。

void main()
{
    char name[10];
    int nAge,nClass;
    long number;
    FILE *fp;
    if((fp=fopen("student.txt","w"))==NULL)
    {
        printf("The file %s can not be opened.\n","student.txt");
        return;
    }
    fscanf(stdin,"%s %d %d %ld",name,&nClass,&nAge,&number);
    fprintf(fp,"%s %5d %4d %8ld",name,nClass,nAge,number);
    fclose(fp);
    if((fp=fopen("student.txt","r"))==NULL)
    {
        printf("The file %s can not be opened.\n","student.txt");
        return;
    }
    fscanf(fp,"%s %d %d %ld",name,&nClass,&nAge,&number);
    printf("name nClass nAge number\n");
    fprintf(stdout,"%-10s%-8d%-6d%-8ld\n",name,nClass,nAge,number);
    fclose(fp);
}

 

下面一篇文章对文件读写做出详细说明http://www.cnblogs.com/likebeta/archive/2012/06/16/2551780.html

 

posted @ 2016-01-29 20:41  #Cloud  阅读(366)  评论(0编辑  收藏  举报