文件指针及字符串的输入形式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

概述
1.文件指针
FILE *fp;
2.打开文件
FILE *fp;
fp=fopen(“file_a”,”r”)指针fp指向了文件file_a
“w”或”w+”每次打开文件将从文件的起始位置开始写,文件中原有内容将全部消失。

“a”或”a+”每次打开文件时将在原有内容的后面添加数据,文件中原有内容将保存。

“r+”为了读和写打开文本文件,读和写总是从文件的起始位置开始,写时只是依次覆盖原
有内容,未覆盖到的将保留。

例3
3.关闭文件
fclose(fp)
4.对文件进行字符的输入和输出函数
putc(ch,fp)或fputc(ch,fp):将字符ch写到文件指针fp所指的文件中去。

ch=getc(fp)或ch=fgetc(fp):从fp指定的文件中读入一个字符赋给变量ch.
5.判断文件结束函数feof()
如果遇到文件结束,函数feof(fp)的值为1,否则为0
6.从文件中读取数据给电脑:fscanf(fp,”%d%d”,&a,&b) 从fp所指的文件中读入两个整数
放入变量a和b中,在文件中的两个整数之间是用空格(或回车符、跳格符)隔开的将运行结果存入到文件中:fprintf(fp,”%d%d”,x,y)把x和y两个整型变量中的整数按%d的格式输出到fp所指的文件中。

为了以后便于读入,两个数之间应当用空格隔开。

例2, 例5 7.读写字符串函数
fgets(str,n,fp)从fp所指文件中读入n-1个字符放入以str为起始地址的空间内,读入过程
中读到换行符或一个EOf,则结束读入。

读入结束后,系统自动在最后加’\0’。

fputs(str,fp)把以str为首地址的字符串输出到fp所指的文件中,字符串中最后的’\0’并未
输出到文件中,也不自动在文件中该字符串末尾加’\n’,因此文件中各字符串是首尾连接的,
为了便于读入,在输出字符串时,应当注意人为地加’\n’这样的字符。

例4
8.fread(buffer,size,count,fp)从fp所指文件中读取count个,每个大小为size的数据块放入
以buffer为首地址的空间里。

fwrite(buffer,size,count,fp)把以buffer地址开始的count个数据块,每个数据块类型为size
的数据输出到fp所指文件中。

例1, 例6
9.文件定位函数
若fp指向二进制文件,可以有位移量:seek_set 文件开始seek_end 文件末尾seek-cur
文件当前位置
fseek(fp,30l,seek_set)使文件位置指针从文件的开头后移30个字节
fseek(fp,-10l*sizeof(int),seek_end) 使文件位置指针从文件尾部前移10个sizeof(int)
若fp指向文本文件,位移量必须是0
fseek(fp,0l,seek_set) 使文件位置指针移到文件开始
fseek(fp,0l,seek_end) 使文件位置指针移到文件末尾
10.rewind(fp) 使文件位置指针回到文件开头。

例题
例1:有以下程序
#include <stdio.h>
main()
{ FILE *pf;
char *s1=〞China〞,*s2=〞Beijing〞;
pf=fopen(〞abc.dat〞,〞wb+〞);
fwrite(s2,7,1,pf);
rewind(pf);
fwrite(s1,5,1,pf);
fclose(pf);
}以下程序执行后abc.dat文件的内容是B
A) China B) Chinang
C) ChinaBeijing D)BeijingChina
例2:有以下程序
#include <stdio.h>
main()
{FILE *fp; int a[10]={1,2,3},i,n;
fp=fopen(“dl.dat”,”w”);
for(i=0;i<3;i++) fprintf(fp,”%d”,a[i]);
fprintf(fp,”\n”);
fclose(fp);
fp=fopen(“dl.dat”,”r”);
fscanf(fp,”%d”,&n);
fclose(fp);
printf(“%d\n”,n);
}
程序的运行结果是B 从文件中读取整型数据时读到间隔符(回车、空格等)结束
A)12300 B) 123 C) 1 D) 321
例3:有以下程序
#include <stdio.h>
main()
{FILE *f;
f=fopen(“filea.txt”,”w”);
fprintf(f,”abc”);
fclose(f);
}
若文本文件filea.txt中原有内容为:hello,则运行以上程序后,文件filea.txt中的内容为C A)helloabc B)abclo C)abc D)abchello
例4:以下程序
#include <stdio.h>
main()
{FILE *fp;char str[10];
fp=fopen(“myfile.dat”,”w”);
fputs(“abc”,fp);fclose(fp);
fp=fopen(“myfile,dat”,”a+”);
fprintf(fp,”%d”,28);
rewind(fp);
fscanf(fp,”%s”,str);puts(str);
fclose(fp);}
程序运行后的输出结果是:C
A)abc B)28c C)abc28 D)因类型不一致而出错
例5:有以下程序
#include <stdio.h>
Main()
{FILE *fp; int I,a[6]={1,2,3,4,5,6};
fp=fopen(“d2.dat”,”w”);
fprintf(fp,”%d%d%%d\n”,a[0],a[1],a[2]);
fprintf(fp, “%d%d%d\n”,a[3],a[4],a[5]);
fclose(fp);
fp=fopen(“d2.dat”,”r”);
fscanf(fp,” “%d%d\n”,&k,&n); printf(“%d%d\n”,k,n);
fclose(fp);
}
程序运行后的输出结果是 d
A)1 2 B)1 4 C)123 4 D) 123 456
例6:有以下程序
#include <stdio.h>
main ()
{fILE *fp; int I,a[6]={1,2,3,4,5,6k};
fp=fopen(“d3.dat”,”w+b”);
fwrite(a,size(int),6,fp);
fseek(fp,sizeof(int)*3,SEEK SET);/*该语句使读文件的位置指针从文件头向后移动3个int型数据*/
fread(a,sizeof(int),3,fp); fclose(fp);
for(i=0;i<6;i++) printf(“%d,”,a[ i]);
}
程序运行后的输出结果是 a
A)4,5,6,4,5,6, B)1,2,3,4,5,6, C)4,5,6,1,2,3, D)6,5,4,3,2,1,
字符串的输入形式
合理的形式:
char s[]="abc";
char s[9]="abc";
char s[9]={"abc"};
char s[9],*p; p="abc";
char *p="abc";
char s[9]="abc",*p;p=s;
不合理的形式:
char s[9]; s="abc";
char s[9]; s[9]="abc";
char s1[9],s2[9]="abc";s1=s2;
字符串输入形式:
char s[10];scanf("%s",s);
若输入:a string (cr) 则s字符数组中只有a
char s[10];gets(s);
若输入:a string (cr) 则s字符数组中只有a string strcpy(s1,s2)
char s1[]="abc",s2[10];
strcpy(s2,s1);
strlen(s1)
strlen(s1)=3
strcat(s1,s2)
char s1[]="abc",s2[10]="123";
strcat(s1,s2) 结果:"abc123"
strcmp(s1,s2)
char s1[]="abc",s2[10]="abd";
strcmp(s1,s2)<0。

相关文档
最新文档