程序如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char a[2][15];
int i=0,j=0,k=0;
FILE* fp=fopen("out.txt","r");
FILE* fp1=NULL;
if(fp==NULL)
{
printf("Wrong!");
return 0;
}
for(i=0;i<10;i++)
{
for(j=0;j<15;j++)
fscanf(fp,"%c",&a[0][j]); //look at here (1)
for(j=0;j<15;j++)
printf("%c",a[0][j]); //look at here (2)
printf("---");
printf("%d",i);
printf("\n");
fscanf(fp,"\n");
fp1=fp; //look at here (3)
for(j=0;j<15;j++) //look at here (4)
fscanf(fp1,"%c",&a[1][j]); //look at here (5)
/*for(j=0;j<15;j++)
printf("%c",a[1][j]);
printf("\n"); */
}
}
问题描述:out.txt是里面有10组15个字符的文件,以换行符分割。标注(3)是让fp赋给另一个指针fp1,指向下一组。但是我发现,有了标注(4)、(5)会导致标注(1)、(2)的运作不正常,不知道是什么原因。如果把标注(4)、(5)注释掉,那么printf("%c",a[0][j])显示一切正常。
难道是fscanf(fp1,"%c",&a[1][j])对fp造成了影响?
我的原来程序是这样的,让第一个指针指向第一组,第二个指针指向第二、三、四...组,第一组和第二、三、四...组的数据比较。然后第一个指针指向第二组,第二个指针指向第三、四...组,做数据比较。
谢谢你。
呵呵,你这样是做不到的!
除非你采用两次打开文件才可以!
fp1 fp指向同一个打开的文件指针,相互影响,只能分两次打开文件才可以:
fp1=fopen("out.txt","r");
if(fp1==NULL)
{
printf("Wrong2!");
return 0;
}
分两次打开我怎么保证fp1总是指向fp的下一组、下下组、等等。
不好意思网上、书上关于这个方面的介绍有点少。
因为你每次都会移动这两个指针,因此,如果要想再继续回到原数据位置,应该采用fseek、ftell函数来实现位置的重定位!
用以下程序去试试吧,希望对你有帮助
int main()
{
char a[2][15];
int i=0,j=0,k=0;
FILE* fp=fopen("out.txt","r");
if(fp==NULL)
{
printf("Wrong!");
return -1;
}
for(i=0;i<10;i++)
{
long lOffset=0; //用来记录a[0]读完后的位置
//取第i+1组数据
for(j=0;j<15;j++)
fscanf(fp,"%c",&a[0][j]);
for(j=0;j<15;j++)
printf("%c ",a[0][j]);
printf("---%d\n",i+1);
fscanf(fp,"\n");
lOffset=ftell(fp) ; //记录下当前位置
//取第i+2,i+3.....组数组
for( k=i+1;k<10;k++ )
{
for(j=0;j<15;j++)
{
fscanf(fp,"%c",&a[1][j]);
}
fscanf(fp,"\n");
for(j=0;j<15;j++)
printf("%c ",a[1][j]);
printf("\n");
}
//回到原来的位置
fseek( fp , lOffset , SEEK_SET );
}
return 0;
}