C语言分行读取txt文件中的数据 要求如下: txt文件中的数据: 11 34 54

C语言分行读取txt文件中的数据
要求如下:
txt文件中的数据:
11 34 54 23.1...
1.1 2.4 9 6.7 ...
2311 344 312
34.34 34 ...
5.3 3.2 ...
627 663 98
......
将第一行的数据,赋给double数组a[],
将第二行的数据,赋给double数组b[];
如a[1]=11,a[2]=34,a[3]=54;
b[1]=1.1,b[2]=2.4,b[3]=9;
将第三行的数据赋给c,d,e;
如c=2311,d=344,e=312;
三行一个循环进行读取。
不知道我说明白了没有,求大神帮帮忙!!

#include <ctype.h> /* 使用 isdigit(), isspace() 函数 */
#include <float.h> /* 使用 DBL_MAX 定义 */
#include <stdio.h>

void read_data(FILE *fp, double *a, double *b, int *c, int *d, int *e)
{
char buf[256], ch;
double *dp = a;
int *ip[] = {c, d, e, NULL};
int pos, pos2 = 0, isa = 1;
while(!feof(fp) && ip[pos2] != NULL)
{
while(!feof(fp) && isspace(fgetc(fp))) ; /* 跳过空字符 */
fseek(fp, -1, SEEK_CUR);                 /* 文件指针向前移1 */
pos = 0;
do
{
ch = fgetc(fp);
if(isdigit(ch) || ch == '.' || ch == '+' || ch == '-' || ch == 'e' || ch == 'E' || ch == '\n' || ch == ' ')
{
buf[pos++] = ch; /* 只读取数字,小数点,正负号,科学计数符号 */
}
}
while(!feof(fp) && buf[pos - 1] != ' ' && buf[pos - 1] != '\n'); /* 逐个读取直到遇到空字符或文件尾 */
buf[pos] = 0;
if(dp != NULL) sscanf(buf, "%lf", dp++); /* 读取double浮点数 */
else sscanf(buf, "%d", ip[pos2++]);      /* 读取整数 */
if(buf[pos - 1] == '\n' && *dp != NULL)  /* 遇到换行符 */
{
if(isa == 1) {*dp = DBL_MAX; dp = b; isa = 0;}
else {*dp = DBL_MAX; dp = NULL;}
}
}
}

#define N 100

int main(int argc, char* argv[])
{
double a[N], b[N];
int c, d, e, pos;
FILE *fp = fopen("data.txt", "r");
if(fp == NULL) return -1;
read_data(fp, a, b, &c, &d, &e);
printf("\na:\n");
pos = 0;
while(a[pos] < DBL_MAX && pos < N) printf("%f ", a[pos++]);
printf("\nb:\n");
pos = 0;
while(b[pos] < DBL_MAX) printf("%f ", b[pos++]);
printf("\nc = %d, d = %d, e = %d\n", c, d, e);
return 0;
}

追问

非常感谢,我试着运行了一下,结果见图

b的值把第三行cde的值都包含进去了,另外cde也应该是浮点数,还有,三行一个循环怎么实现的?谢谢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-05-29
一个一个读取,再分割,再转换。追问

能给个代码吗?谢谢了

相似回答