再请问一个C语言的问题

来源:百度知道 编辑:UC知道 时间:2024/06/13 23:26:31
#include <stdio.h>
main()
{
FILE *fp;
int i,m;
fp=fopen("c:\\abc.txt","wb+");
scanf("%d",&i);
fwrite(&i,2,1,fp);
fread(&m,2,1,fp);
printf("m=%d",m);
fclose(fp);

}
请问为什么我输入的数和输出的数一直不相等??

你用的同一个文件流指针fp,当调用fwrite函数时写入整数i,此时fp指针已经指向文件末尾。而你此时有读取文件,是从fp当前位置读取的,当然无法读取到你刚才存的数了。在fread前面加一行:fseek(fp,0,SEEK_SET);把fp移向文件头,此时才能正确读出你刚才存入的数。
补充:
你是在vc++环境下么?如果是debug调试,m要赋初值,比如m = 0;这样就没错了。否则还是不能正确赋值,因为debug调试不会对变量自动赋值。如果是release调试就没事。一般情况下定义变量最好赋初值,安全起见。
二楼说的有道理,读写用同一个fp一般情况下不这么用,会出乱子的,就跟楼主现在一样。用2个FILE*分别读写会更灵活些。

存在两个问题:
1.文件指针位置的问题
2.数据类型的存储方式
1.读写可以用同一个指针,注意用fseek移动指针的位置就行
int fseek( FILE *stream, long offset, int origin );
2.i和m都是int类型的,占4个字节,
fopen中你用Binary方式打开文件:
fwrite(&i,2,1,fp);你将i的低2个字节写入文件中
fread(&m,2,1,fp);把存入文件的2个字节覆盖m的低2个字节
但是m的高两个字节是不确定的,所以输出m的值就出错了

改成下面就没问题了
main()
{
FILE *fp;
int i,m;
fp=fopen("c:\\abc.txt","wb+");
scanf("%d",&i);
fwrite(&i,4,1,fp);
fseek(fp,0,SEEK_SET);
fread(&m,4,1,fp);
printf("m=%d",m);
fclose(fp);
}

// wenti.cpp : Defines the

#include