C语言 读取若干行不知道有多少个的数

tehon 2012-07-09 07:32:12
某文本文件中有n(已知)行数(第一行中给出),下面每行有未知个数的整数若干(个数<1000),循环将每一行的全部整数读入一个一维数组。求代码。

样例文本文件:

2
20 1 8 4 13 6 10 15 2 17 3 19 7 16 8 11 14 9 12 5
1 -2
...全文
620 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
天台的故事 2012-07-09
  • 打赏
  • 举报
回复
while(fgets())
gz_qmc 2012-07-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
引用 3 楼 的回复:

用fgetc自己解析也可以啊,根本不管几行

要管几行也简单


不是几行的问题,而是每行有不同个数的整数,这个才是处理的重点,行数太简单了!
[/Quote]

楼主没弄明白
自己解析就是完全控制的意思
我简单给你说一下思路吧

char ch1=0,ch2=0;
char buf[50]={0};
int count=0; //每行数据个数
int num[1000];
int sel=0; //字符定位

FILE *fp=fopen("文件名","rb");
ch2=fgetc(fp);

while(1)
ch2=fgetc(fp);
if(feof(fp)) break;

if(ch2==0x20) //空格
{
buf[Sel]=ch1;

num[count]=atoi(buf);
count++;
memset(buf,0,50);

ch1=fgetc(fp);
Sel=0;
}
else if(ch2==0x0d)
{
if(ch1==0x0a) //回车换行
{
num[count]=atoi(buf);
count++;
memset(buf,0,50);

ch1=fgetc(fp);
Sel=0;
printf("一行结束了,共得到%d个数据",count);
count=0;
}
}
else
{
buf[Sel]=ch1;
ch1=ch2;
Sel++;
}
}
shaode01 2012-07-09
  • 打赏
  • 举报
回复
这是个比较笨的办法,fscanf扫描到文件末尾,每扫描一个数据num++,然后malloc开辟相应大小的空间,然后重定向将读写位置移动到文件开头再扫描一遍,这次负责存储数据到数组内
shaode01 2012-07-09
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
void main()
{
FILE *fp;
int line;
int temp;
int i;
int *a;//你要存入的数组
int num=0;//记录数组的大小
if((fp=fopen("in.txt","r+"))==NULL){
printf("open error\n");
exit(0);
}
fscanf(fp,"%d",&line);
for(;fscanf(fp,"%d",&temp)!=EOF;)
{
num++;
}
printf("%d\n",num);
a=(int *)malloc(sizeof(int)*num);
fseek(fp,0,SEEK_SET);
for(i=0;i<num;i++)
{
fscanf(fp,"%d",&a[i]);
printf("%d ",a[i]);
}


}
IVERS0N 2012-07-09
  • 打赏
  • 举报
回复
你用个变量统计不就行了
Universe_Admin 2012-07-09
  • 打赏
  • 举报
回复
先用fgets来读取每一行的所有数据保存到一个数组A里面
然后定义一个变量来统计每行的个数,一个字符一个字符的从数组里面读取,以空格为分界截取整数(可用strstr),截取的整数保存到数组B,遇到\n说明该行结束。
tehon 2012-07-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

用fgetc自己解析也可以啊,根本不管几行

要管几行也简单
[/Quote]

不是几行的问题,而是每行有不同个数的整数,这个才是处理的重点,行数太简单了!
gz_qmc 2012-07-09
  • 打赏
  • 举报
回复
用fgetc自己解析也可以啊,根本不管几行

要管几行也简单
tehon 2012-07-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

while(fgets())
[/Quote]

然后呢,fgets我会,然后呢?
不知道具体个数怎么放进数组,若是用sscanf的话又该怎么处理?
W170532934 2012-07-09
  • 打赏
  • 举报
回复
while(fgets())

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧