不知你向文件输入的是什么数据,输入数据的函数很多,有fputc(s,fp)有fwrite()函数、、、、
下面是想文件输入字符,并把字符串中的小写字符转换成大写字符:
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
int main()
{
FILE *fp
char filename[20]
printf("请输入文件的名称:")
scanf("%s",filename)
if((fp=fopen(filename,"w"))==NULL)
{
printf("cannot open file !!!\渣兄n")
exit(0)
}
printf("请输入字符直至结束(ctrl +z):")
fflush(stdin)
char s
while(scanf("%c"拍燃,&s)!=EOF)
{
if(islower(s))
s=toupper(s)//把小写字符转换成大写字符
fputc(s,fp)
}
rewind(fp)//是位置指针重新返回文件的开头,此函数没有返回值
if((fp=fopen(filename,"r"))==NULL)//以读的方袭梁虚式打开文件
{
printf("cannot open file !!!\n")
exit(0)
}
while(!feof(fp))
{
s=getc(fp)
putchar(s)
}
return 0
}
测试:
请输入文件的名称:hello
请输入字符直至结束(ctrl +z):hello world !
Z
Z
HELLO WORLD !
Press any key to continue
提供思路:先一组一组数据读取,然后进行比较,看是不是你要修改的数据(如果是你要修改的数据,那此时文件的指针已经指向下一组数据了),然后用fseek(fp,-sizeof(type),SEEK_CUR)使文件指针指向该数据块(fp为文件指针,sizeof(type)为察碧誉数据长度,type是我指定,你可以换成你需要的数据类型,比如int或是struct等) 如果你知道数据慧备是第几组就更好了,直接用fseek(fp,(n-1)*sizeof(type),SEEK_SET)就能找到位置了 用前面两种方法的前提是,你存入数据的时候用的都是以数据块的方式写入的同一种数据(比如只用fwrite()函数写入的struct类型数据),如果用的是复合方式写入,比如用了fwrite()、fputc()、fprintf(),这败段样的话,定位就有问题了。你需要解决两个问题。1、待更改的文件应该是以“块”状形式写入的,比如fwrite((void *)student stu,sizeof(student),1L,fp),只有哗竖这样才能准确定位待更改“块”的位置。而以fprintf()写入的文件,可能由于数据的不同,每个结构数据占用的空间就不同,橘祥即使你能准确定位,但写入新数据后,若长度短了,剩余的空间可能造成混乱,若长圆芦搏度长了,可能造成”覆盖“。
2、打开文件同时用于”读/写“时,打开的格式是"r+"或”w+“。
另外,还需要搞清楚文件读写指针的使用特点,前两个问题解决后再讨论。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)