C语言fscanf错在哪里

来源:百度知道 编辑:UC知道 时间:2024/05/22 00:06:08
#include "stdio.h"
int prime(int m)
{ int i;
for(i=2;i<=m-1;i++)
if(m%i==0) break;
if (i==m)
{ return(1);}
else return(0);
}
main()
{ FILE *p;
char nam[20]="d:\\data.txt",ch;
int i;
p=fopen(nam,"w");
if(p==NULL)
{printf("can not open");
exit(1); }
for(i=2;i<100;i++)
if(prime(i)==1)
{ fprintf(p,"%d ",i);}
close(p);

p=fopen(nam,"r");
if(p==NULL)
{printf("can not open");
exit(1); }
fscanf(p,"%d",&i);
while(i!=EOF)
{
printf("%d,",i);
fscanf(p,"%d ",&i);}
fclose(p);
}
如果没有后面11行代码,data.txt中内容是正确的;加上后面11行含有fscanf输出代码,一直输出100并且data.txt中内容为空。
fscanf(p,"%d ",&i);}把格式化参数的空格去掉。也不好用。
fclose 不在循环里
后面代码只是想把文件的内容读出,在屏幕显示
我主要想使用fscanf ,如果给定一个

你是想把第一次打印到文件的数据再读到程序里来?

你干脆把第二段推倒重来……第一段用一个变量记录下数据个数,第二次用一个for语句就读完了。

用for不影响用fsacnf,
for(m=0;m<i;m++)
{
fscanf(p,"%d ",&x);
printf("%d ",x);
}
这个是模型,i是第一次打印到文件里的计数,就是有多少个,m是临时变量,x是中间变量,储存每次的数字。这样也可以嘛。这肯定不会死循环的

如果是不知道的话,就用i=1;
While(i!=NULL)
{fscanf(p,"%d ",&i);
printf("%d ",i);
}
按理说是不会出错的。
我这里不太清楚用EOF行不行,我记得读入字符的时候才用EOF

fscanf(p,"%d ",&i);}
把格式化参数的空格去掉。

fclose不要写在循环里面。。

不是fscanf的问题,而是fclose,因为第一次循环的时候就把文件给关闭了,所以下次循环的内容是无法输进去的

这还不死循环?