先看湖南自学考试“计算机及应用”专业《高级语言程序设计》教材中的一段程序,
这是一个把小写字母转换成大写字母的程序,这里仅把打开文件的盘符和目录做了修改,
其中myturboc是D盘中已经建立的目录,char2.txt是并不存在的文件。
#include<stdio.h>
#include<ctype.h>
main()
{
FILE *fp;
char c;
if((fp=fopen(“d:\\myturboc\\char2.txt”,”r+”))==NULL)
{
printf(“file can not open!\n”);
exit(0);
}
while(!feof(fp))
{
c=fgetc(fp);
if(islower(c)!=0)
{c=toupper(c);
fseek(fp,-1L,1);
fputc(c,fp);
fseek(fp,0L,1);
}
}
fclose(fp);
}
问题:执行fputc(c,fp)语句后文件内部指针后移一个字节的位置,
fseek(fp,0L,1)语句看似没起什么作用但如果去掉fseek(fp,0L,1)程序就无法正常运行。
有哪位朋友知道这是什么原因,我在这里先谢谢了。
>> 本文固定链接: http://www.vcgood.com/archives/1260
这段代码的功能应该是把文本文件里的小写字母全部转换为大写字母.
while(!feof(fp)) //检测是否到了文件尾
{
c=fgetc(fp); //得到当前位置的字符,传入变量C中
if(islower(c)!=0) //检测此字符是否是小写,如果不是,执行以下代码
{c=toupper(c); //把变量C中的字符转换为大写
fseek(fp,-1L,1); //再把指针退移
fputc(c,fp); //把转换后的字符写入原来小写字符的位置
fseek(fp,0L,1); //把指针从当前位置向前移,为fgetc读取做准备,否则会一直在当前位置进行读取值
}
因为有个fseek(fp,-1L,1); //再把指针退移
所以要fseek(fp,0L,1);进行前移,才能保证指针不断向前运动.