如何使用main中另一个函数的数组?

时间:2017-10-04 14:23:06

标签: c

编辑:我在代码中做了一些更改。

我想使用两个.txt文件中的数据编写一个线条拟合程序。代码如下:

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

int data_read(char programs_x[], char programs_y[]) {

    int i=0, j=0, k;
    int numProgs_x=0;
    int numProgs_y=0;
    char line_x[1024];
    char line_y[1024];

    FILE *file_x;
    FILE *file_y;
    file_x = fopen("data_x.txt", "r");
    file_y = fopen("data_y.txt", "r");

    while(fgets(line_x, sizeof line_x, file_x)!=NULL) {
        //check to be sure reading correctly
        //printf("%s", line_x);
        //add each filename into array of programs
        programs_x[i]=strdup(line_x); 
        i++;
        //count number of programs in file
        numProgs_x++;
    }

    while(fgets(line_y, sizeof line_y, file_y)!=NULL) {
        //check to be sure reading correctly
        //printf("%s", line_y);
        //add each filename into array of programs
        programs_y[j]=strdup(line_y); 
        j++;
        //count number of programs in file
        numProgs_y++;
    }

    fclose(file_x);
    fclose(file_y);
    return 0;

}

int main ( void ) {
    int i, j, k, n=1024;
    float s1=0,s2=0,s3=0,s4=0,a,d,b;
    char programs_x[1024], programs_y[1024];
    data_read(programs_x, programs_y);
    for(i=0;i<n;i++) {
        scanf("%f", &programs_x[k]);
    }
    for(i=0; i<n; i++){
        scanf("%f", &programs_y[k]);
    }
    for(i=0;i<n;i++) {
        s1=s1+programs_x[i];
        s2=s2+programs_x[i] * programs_x[i];
        s3=s3+programs_y[i];
        s4=s4+programs_x[i] * programs_y[i];
    }
    d=n*s2-s1*s1;
    a=(s2*s3-s1*s4)/d;
    b=(n*s4-s1*s3)/d;
    printf("\nThe values of a and b are : %f\t%f\n",a,b);
    printf("\nThe Required Linear Relation is : \n");
    if(b>0){
        printf("\ny=%f+%fx\n",a,b);
    }
    else {
        printf("y=%f%fx",a,b);
    }
    return 0;
}

当我尝试编译此代码时,编译器会显示以下错误:

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test3.c:
Error E2349 test3.c 22: Nonportable pointer conversion in function data_read
Error E2349 test3.c 33: Nonportable pointer conversion in function data_read
*** 2 errors in Compile ***

如何修复错误?在声明和调用数据类型时,我在哪里犯了错误?我非常确定这次将programs_xprograms_y声明为char,而不是int

2 个答案:

答案 0 :(得分:2)

错误可能意味着不支持非标准函数strdup()。 C编译器不需要支持它,这就是避免该功能的好主意。如果该函数作为非标准扩展支持(它是POSIX的一部分),您可能会在未包含的标题<string.h>中找到它。

至于其余错误的原因,我不知道,因为那些似乎来自其他文件,而不是你发布的文件。

答案 1 :(得分:2)

错误很难确定,因为我们没有行号,但这一行肯定不适合main

data_read(char programs_x[], char programs_y[]);

要调用一个函数,您只需列出您传递给它的变量和值,如下所示:

data_read(programs_x, programs_y);

当您将programs_xprograms_y声明为int的数组时,毫无疑问会导致更多错误/警告被标记,但data_read期待char的数组1}}。因此,您认为自己的职能需要以及您需要为其提供的内容存在冲突。