我需要从C

时间:2016-08-06 11:45:27

标签: c file text

我需要从文本文件中读取x和y坐标,然后将它们用于多项式回归。我可以做回归部分,但我无法读取文件中的值。数据点是

5,10,15,20,25,30,35,40,45,50

17,24,31,33,37,37,40,40,42,41

第一行是x,第二行是y,它们在txt文件中完全按照这样写。

从另一个问题我设法将所有数字读入一个20的单个x数组,但我真的需要它们在单独的数组中作为x和y。我怎样才能做到这一点? 这是我目前的代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
FILE *data;
data = fopen("data.txt", "r");

int x[20];
int i=0;


for(i=0; i<20; i++)
    fscanf(data, "%d,", &x[i]);


for(i=0; i<20; i++)
printf("x are: %d\n", x[i]);


fclose(data);
return 0;
}

提前致谢。

3 个答案:

答案 0 :(得分:0)

如果问题中所述,如果您总是在一行中有10个int而在另一行中有10个int,则可以再使用一个数组int y[10];来存储y值。并使用两个for循环 - 一个用于读取10个x值,另一个用于读取10 y值。并且您的数组都只需要存储10个元素。

    int x[10];
    int y[10];  // Array to store y values
    int i=0;

    for(i=0; i<10; i++) // Read first 10 values to x array
            fscanf(data, "%d,", &x[i]);

    for(i=0; i<10; i++) // Read next 10 values to y array
            fscanf(data, "%d,", &y[i]);

    for(i=0; i<10; i++)
            printf("x are: %d\n", x[i]);

    for(i=0; i<10; i++)
            printf("y are: %d\n", y[i]);

但是,如果在这些行中有可能存在不同数量的整数 - 大于或小于10 - 那么您将需要进行更多检查。

答案 1 :(得分:0)

检查是否存在逗号

int x[20], y[20];
int i, n;
char tail;

for(i = 0; i < 20 && 2 == fscanf(data, "%d%c", &x[i], &tail); i++){
    if(tail != ',')
        break;
}
n = i+1;//if(n > 20){ puts("bad format!"); return -1;}

for(i = 0; i < n; i++)
    fscanf(data, "%d,", &y[i]);

fclose(data);

for(i = 0; i < n; i++)
    printf("(%d, %d)\n", x[i], y[i]);

答案 2 :(得分:0)

首先,我建议您按成对编写xy值(似乎更合乎逻辑,因此实现起来更简单)。例如:

1 2
3 4
5 6

所以fscanf(FILE* fp, char* format,...)

  • FILE* fp - 指向要从中读取数据的流的指针(可以是标准stdin,使fscanf()作为scanf());

  • char* format - 格式字符串(例如:"%d%s%d");

  • ... - 将接收输入数据的内存中变量和/或区域的地址。变量数由char* format指定。

您使用fscanf(data, "%d,", &x[i]);而不是fscanf(data, "%d%d", &x[i],&y[i]);忘记您获得的数据与char* format中指定的数据一样多。

另请注意,fscanf()以及scanf()会返回成功输入数据的数量,这意味着您可以执行以下操作:

while(fscanf(data,"%d%d",&x[i],&y[i]) == 2) {
    // do something, or don't
}

您可以将while留空。最后,您将xy点存储在不同的数组中。会发生什么是fscanf()尝试读取两个整数值。如果他设法做到这一点,他返回成功输入数据的数量,意思是2.否则他返回1(如果你错过xy对)或0(如果它是文件结束)