关于c语言文件读写问题和文件读写标志的疑问

#include<stdio.h>
#include<stdlib.h>
int main()
{FILE*fp;
char ch,name[20],str[20],out[20];
printf("请输入文件名:");
scanf("%s",name);
getchar();
if((fp=fopen(name,"w+"))==NULL)
{printf("无法打开文件");
exit(0);}
printf("请输入一段字符:\n");

gets(str);
fputs(str,fp);
fputs("\n",fp);
putchar(10);
fgets(out,5,fp);
printf("%s",out);

fclose(fp);
}

为什么是这个结果啊?,w+不是读和写么?还有想问下,,当我输入完sddawdls这段字符之后,文件读写标志应该是在文件末尾的吧,那么我用fgets(out,5,fp);得到的这5个字符是从文件开头开始算起的,还是接着从刚才文件末尾开始?

先回答你第一个问题:因为fgets(out,5,fp)读取的是你输入字符串以后的字符,那是不确定的,所以会出现乱码,
第二个问题:w+是将文件以读写方式打开,如果里面存有内容将会清零,以供写入
第三个问题:当你输入完字符以后文件的指针是指向末尾的,所以fget(out,5,fp)得到的是不是从头开始的字符,而是从最后一个字符以后开始的,
所以,你的问题就很容易解决了,只要让文件指针重新指向文件头即可:在putchar(10)后面加上一句:rewind(fp)就可以了追问

那请问下有函数能实现使文件读写标志指向特定位置的吗?文件方面的函数还有什么?

追答

有,fseek()函数,fseek()有三个参数:可以这样用:
fseek(fp, 0L, SEEK_SET),第一个参数,文件指针,第二个参数,文件的指定位置,第三个参数表示文件的开始处

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-02-01
fputs("\n",fp); 

rewind(fp); //写入后使文件指针回到文件首,再读取

fgets(out,5,fp);

第2个回答  2014-02-01
应该以追加模式打开 要不然任何w模式打开文件都会重写
相似回答