编辑:我在代码中做了一些更改。
我想使用两个.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_x
和programs_y
声明为char
,而不是int
。
答案 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_x
和programs_y
声明为int
的数组时,毫无疑问会导致更多错误/警告被标记,但data_read
期待char
的数组1}}。因此,您认为自己的职能需要以及您需要为其提供的内容存在冲突。