- 下面这段程序代码无法编译成功,哪里出了问题?
01 #include <stdio.h>
02
03 int main(void)
04 {
05 FILE fptr;
06 fptr=fopen(“test.txt”,”w”);
07 fputs(“Justin”,fptr);
08
09 return 0;
10 } - 什么是二进制文件?有什么优点?
- 下面这段程序代码片段哪里出了问题?
01 ...
02 if( (fptr = fopen(“巴冷公主.txt”, “r”) )= =NULL)
03 puts(“无法打开文件”);
04 else
05 while( feof(fptr) )
06 {
07 printf(“%c”, fgetc(fptr) );
08 count++;
09 if (count % 30 = = 0)
10 putchar(‘\n’);
11 }
12 ... - C语言的文件输入/输出函数与基本输入/输出函数有何差异?
- 以下这段程序代码片段所要打开的文件内含有汉字字符,在读取的过程中,发现出现了乱码,请问哪里出了问题?
01 ...
02 if( (fptr = fopen(“巴冷公主.txt”, “r”) )= =NULL
) 03 puts(“无法打开文件”);
04 else
05 while( !feof(fptr) )
06 {
07 fgets(str,30,fptr);
08 printf(“%s\n”,str);
09 }
10 ...
- 当不用通过数据流与缓冲区,而使用较低级的I/O函数(包含在
与 头文件中)来直接对磁盘进行存取时,有何优缺点? - 设计一个程序,执行该程序后,可以直接打开程序源文件显示程序代码内容。
- 编写一个程序,将汉字写入一个文件中,并加上编码信息,汉字的编码为0xA440~0xFFFF。
- 在fseek()函数中,说明文件位置光标的起始点模式的意义。 (1)SEEK_SET:(2)SEEK——CUR(3)SEEK_END
- 设计一个程序,使用命令行自变量来指定文件名,并进行错误检查动作,包括打开文件、读取与写入及关闭文件等。
- 设计一个程序,利用命令行参数来指定两个网络上的图片文件名,并比较两个图片文件的内容是否相同。
- 在UltraEdit编辑器中,可以同时显示十六进制码与ASCII字符,使用C语言程序模拟这个功能。
- 下面这个程序代码片段想要进行文件的修改,请问哪里出了问题?
01 ...
02 FILE *fptr;
03 int count=0;
04 if( (fptr = fopen(“巴冷公主.txt”, ”w”) )= =NULL) //检查文件是否打开成功
05 puts(“无法打开文件”);
06 else
07 while( !feof(fptr) )
08 ...
C语言文件测试题(2)
第05行文件指针声明错误,应修改如下:
FILE *fptr;
所谓二进制文件,就是以二进制格式保存,将内存中的数据原封不动地保存到文件中,适用于非字符为主的数据。如果以记事本程序打开,将会出现一堆乱码。最大优点在于存取速度快、占用空间小及可以随机存取数据,在数据库应用上比文本文件方便。
while(!feof(ptr) )。
差异性为文件输入/输出函数需要指定目标文件进行输入/输出,而基本输入/输出则直接输出在屏幕上。
由于汉字是由两个字节组成的,而fgets()函数只读取length-1个字符,最后一个字符填上’\0’,由于第07行设置length为30实际上只会读取29个字符,因而造成最后一个汉字读取不完全,所以造成乱码,第07行的length设置应该改为31。
优点是可以节省设置缓冲区的记忆空间。缺点是磁盘的存取速度较慢,容易拖累程序整体执行速度。缺点是这些函数不是C语言的标准函数,跨平台操作时容易发生问题。
此题是简单的文本文件存取练习,可以加上__FILE__宏,让程序更有可移植性,程序代码如下所示:
#include <stdio.h>
int main(void)
{
FILE *fptr;
if( (fptr = fopen(__FILE__, “r”) )= =NULL)
puts(“文件打开失败”);
else
{
while(!feof(fptr) )
printf(“%c”, fgetc(fptr) );
}
retrun 0;
}
可以将汉字分为高、低两个字节,使用 fprintf()函数输出到文件中,程序代码下所示:
#include <stdio.h>
int main()
{
unsigned i;
FILE *fptr;
struct
{
char H;
char L;
} ch;
if( (fptr = fopen(“chword.txt”,”w”) ) = = NULL)
printf(“文件打开失败”);
else
{
for( i= 0xA440; i < 0xFFFF; i++)
{
ch.H = i / 256;
ch.L= i % 256;
fprintf(fptr,”%X %c%c\t”, i, ch. H, ch. L);
if(!(i % 10) )
fputc(‘\n’,fptr);
}
fclose(fptr);
}
return 0;
}
文件位置光标起始点模式的意义如下
mode 说 明
SEEK_SET 光标起始点位于文件的起始位置
SEEK_CUR 光标起始点为当前文件光标位置
SEEK_END 光标起始点位于文件的结尾
#include <stdio.h>
int main(int argc,char *argv[ ])
{
FILE *fptr;
if (argc !=2) /*检查在命令行是否有指定文件*/
printf(“没有指定文件名!”);
else
{
if( (fptr = fopen(argv[1],”r”) )= =NULL) /*检查文件打开是否有错*/
printf(“文件打开失败!”);
else
{
while(!feof(fptr) )
{
printf(“%c”,fgetc(fptr) );
if (ferror(fptr) ) /*检查文件关闭是否有错误*/
printf(“文件读取错误”);
}
if (fclose(fptr) = = EOF) /*检查文件关闭是否有错误*/
printf(“文件关闭发生错误,文件信息可能丢失!”);
}
}
return 0;
}
由于图片文件多数属于二进制文件,如果每个字节的值都相同,则表示两张图片的内容一样。以下程序可以进行文件对比,查看两个文件的内容是否完全一样。
01 #include <stdio.h>
02
03 int main(int argc,char *argv[ ])
04 {
05 FILE *fptr1, *fptr2;
06 char ch1,ch2;
07 int same=0;
08
09 if (argc !=3) /*检查在命令行是否有指定文件*/
10 printf(“执行范例:CH10-15 <文件1> <文件2>\n”);
11 else
12 {
13 if ( (fptr1 = fopen(argv[1], ”rb”) ) = = NULL) /*以两进位方式打开*/
14 printf(“无法打开%s! \n”, argv[1]);
15 else if ( (fptr2=fopen(argv[2],”rb”) )= =NULL) /*以两进位方式打开*/
16 printf(“无法打开%s! \n”, argv[2]);
17 else
18 {
19 while(!feof(fptr1) )
20 {
21 ch1=fgetc(fptr1);
22 ch2=fgetc(fptr2);
23 if (ch1 !=ch2)
24 {
25 printf(“文件内容不同!”);
26 same = 1;
27 break;
28 }
29 }
30 if(!same)
31 printf(“文件内容相同!”);
32 fclose(fptr1);
33 fclose(fptr2);
34 }
35 }
36
37 return 0;
38 }
可以使用一个字符数组暂存读入的字符,每显示16个字节,就将字符数组的值显示在它后面,程序代码如下所示:
#include <stdio.h>
int main(int argc,char* argv[ ])
{
FILE *fptr;
unsigned char ch, chrtmp[16]; /*使用字符数组暂存读入的字符*/
int i,count=0;
if(argc != 2)
puts(“没有指定文件”);
else
{
if ( (fptr = fopen(argv[1], ”rb”) )= =NULL)
printf(“无法打开文件!\n”);
else
{
while( !feof(fptr) )
{
fread(&ch, sizeof(ch), 1, fptr); /*每次读取一个字节*/
chrtmp[count]=ch;
if (ch<= 0xF) /*如果小于0xF,于显示上补0 */
printf(“0%-2X”, ch);
else
printf(“%-2X”, ch);
count++;
if( ! (count % 16) ) /*每显示16字节换行*/
{
printf(“ ”);
for(i=0; i<16; i++)
if(chrtmp[i] > 32 && chrtmp[i] < 127)
printf(“%c”,chrtmp[i]);
else
printf(‘.’);
count = 0;
putchar(‘\n’);
}
}
fclose(fptr);
}
}
return 0;
}
打开文件时,若使用w参数,将会产生一个新的文件覆盖原来的文件,若要附加或修改文件,则应使用a或是r+参数。
自我评价 答对0--2题 答对3--4题 答对5--6题 答对7--8题 答对9--10题
上一篇 下一篇
