作为我正在阅读的一本书中的编码练习的简单尝试,我写了以下代码:
#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宽度。我希望能够在文本中的每一列上都有一个标题,但是 - 有什么方法可以做到这一点吗?
答案 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]
。