2017-02-11 99 views
6

我想从文本文件中读取数字并将其存储到数组中。 当我尝试读取数组中的数字时,输出略微关闭。 这是我的代码:数组打印不正确值

struct point{ 
    double x[7]; 
    double y[7]; 
}point; 

int main() 
{ 
    FILE *fp; 
    fp = fopen("data_2.txt", "r"); 
    struct point points; 
    int len = 8; 
    int i = 0; 
    int j = 0; 
    int k = 0; 
    double a = 0; 
    double b = 0; 
    double c = 0; 
    double total = 0; 
    int left=0; 
    int right=0; 
    int line = 0; 
    for (i=0;i<len;i++) 
    { 
     fscanf(fp, "%lf %lf", &points.x[i],&points.y[i]); 
    } 
    for(i = 0; i < len;i++) 
     printf("looking at point %.2f %.2f\n",points.x[i],points.y[i]); 

    return(0); 
} 

我使用测试文件包含以下数字

2.3 7.5 
    7.6 7.1 
    8.5 3.0 
    5.9 0.7 
    1.0 2.0 
    5.1 5.8 
    4.0 4.5 
    4.3 3.4 

输出我得到的是这样的:

looking at point 2.30 4.30 
looking at point 7.60 7.10 
looking at point 8.50 3.00 
looking at point 5.90 0.70 
looking at point 1.00 2.00 
looking at point 5.10 5.80 
looking at point 4.00 4.50 
looking at point 4.30 3.40 

它是什么,我做错误?

+0

这很奇怪。尝试关闭文件,一旦它的使用完成功能。 – Shravan40

+3

你有一个数组索引溢出。数组'x,y'在struct point中只能存储7个数字,但是您正在尝试写入8.扩大数组大小将修复它。 –

+0

您应该查看[适当的C格式化](// prohackr112.tk/pcf)。 –

回答

7

问题是你的结构不够大,无法存储8个数字,它调用undefined behavior。你有double x[7],但你循环到8.

为什么你得到的具体行为,我可以在这里重现OS X,我不知道。但这对你来说是未定义的行为。

3

更新你的结构是这样的:

struct point{ 
    double x[8]; 
    double y[8]; 
}point; 

这将帮助你阅读并正确显示数据。 example-with-stdin