C数组代码的异常输出

时间:2014-06-20 06:37:25

标签: c arrays

作为我正在阅读的一本书中的编码练习的简单尝试,我写了以下代码:

#include <stdio.h>

int main() {
        double data[12][5];
        int i;
        double t = 2.0;

        for(i = 0; i < 12; i++) {
                data[i][0] = t;
                t += 0.1;
        }

        for(i = 0; i < 12; i++) {
                data[i][1] = 1.0 / data[i][0];
                data[i][2] = data[i][0] * data[i][0];
                data[i][3] = data[i][2] * data[i][0];
                data[i][4] = data[i][3] * data[i][0];
        }

        printf("x 1/x x^2 x^3 x^4\n");

        int row;
        int column;

        for(row = 0; row < 12; row++) {
            printf("%10lf %10lf %10lf %10lf %10lf\n", data[i][0], data[i][1], data[i][2], data[i][3], data[i][4]);
        }

        return 0;
}

但是,当我运行它时,输出显示在ideone.com上:http://ideone.com/KLWtdk。根据我认为代码应该如何运行,最左边的列应该是一个值范围,包括2.0到3.0,步长为0.1。但事实并非如此。

此外,在IRC上聊天时,我被告知在打印数据表时不使用制表符,而是使用printf宽度。我希望能够在文本中的每一列上都有一个标题,但是 - 有什么方法可以做到这一点吗?

3 个答案:

答案 0 :(得分:4)

您的问题是您声明了迭代变量row,但在print语句中使用i作为索引。由于i的值与row的值无关,因此每次迭代都会给出相同的值,但它们不是正确的值。

您可以通过访问data[row][column_index]数组元素来解决此问题,例如data[row][0]

关于格式化,如@JonathanLeffler所述:

使标签对齐的方法是

printf("%10s %10s %10s %10s %10s\n", "x", "1/x", "x^2", "x^3", "x^4"); 

在字符串格式中使用与数字格式相同的宽度。这种权利证明了标签;左对齐,改为使用%-10s

答案 1 :(得分:0)

在最后一个循环中,您使用不同的变量进行迭代,对打印值使用不同的变量。变量i用于声明,条件检查&amp;递增/递减。

i is that variable.

另一个变量row用于打印具有垃圾值但在整个循环中没有更改的值。

row is that variable

答案 2 :(得分:-1)

打印结果时使用data[row][0], data[row][1], data[row][2], data[row][3]