例如一个txt文件里有3行,第一行是1 2 3 4 5,第二行是2 3 4 5 6,第三行是4 5 6 7 8,怎么把“每行”分别存到数组里
for(i=0;i<5;i++)
.....
printf(a[n]...)
输出结果1 2 3 4 5
2 3 4 5 6
4 5 6 7 8
使用for循环语句+文件操作函数即可文件中数据读取并存到数组中。
1、C语言标准库提供了一系列文件操作函数。文件操作函数一般以f+单词的形式来命名(f是file的简写),其声明位于stdio.h头文件当中。例如:fopen、fclose函数用于文件打开与关闭;fscanf、fgets函数用于文件读取;fprintf、fputs函数用于文件写入;ftell、fseek函数用于文件操作位置的获取与设置。一般的C语言教程都有文件操作一章,可以找本教材进一步学习。
2、例程:
不用二维数组呢,就用一维数组a[5], 把第一行5个数赋给数组a[5]然后输出5个数,在把第二行赋给数a[5]组再输出5个数,也就是说就用1个数组
追答那就这样吧
#include
int main()
{
int a[5];
int i,j;
FILE* fp=fopen("d:\\a.txt","r");
if(fp==NULL)
{
printf("无文件");
return -1;
}
for(i=0;i<3;i++)
{
for(j=0;j<5;j++)
{
fscanf(fp,"%d",&a[j]);
printf("%d ",a[j]);
}
printf("\n");
}
fclose(fp);
return 0;
}
谢谢你了,不过for(i=0;i<3;i++)改为while(不是文件尾)更好点吧,怎么改成while循环的呢?如果是字符的话我知道这样改while((ch=fgetc(fp))!=EOF) putchar(ch);但是整型怎么写呢?
追答我以为你就只要输出前三行呢,那这样就行:
#include
int main()
{
int a[5];
int i,j;
FILE* fp=fopen("d:\\a.txt","r");
if(fp==NULL)
{
printf("无文件");
return -1;
}
while(!feof(fp)) /* 不是文件尾 */
{
for(j=0;j<5;j++)
{
fscanf(fp,"%d",&a[j]);
printf("%d ",a[j]);
}
printf("\n");
}
fclose(fp);
return 0;
}
呵呵,你真热心,谢谢了,还有一个问题,如果文件里写着1 2 3 4 5,怎么跳过前两个数字,最后程序里就输出3 4 5,是只把3 4 5存入数组,不是把1 2 3 4 5存入数组再输出3 4 5
追答那就这样
while(!feof(fp)) /* 不是文件尾 */
{
for(j=0;j<5;j++)
{
if(j<2)
{
fscanf(fp,"%d",&a[2]);
continue;
}
fscanf(fp,"%d",&a[j]);
printf("%d ",a[j]);
}
printf("\n");
}