简单的二维

时间:2017-04-07 01:54:50

标签: c ansi

我试图解决这个问题。

https://gyazo.com/043018a2e547b4bfb4ef9eb1adfd707a

然而,使用我当前的代码,我将其作为输出。

https://gyazo.com/13ed434ec876e145931b45e6d12a02fc

目前这是我的代码。

#include <stdio.h>
#include <stdlib.h>
#define r 3
#define c 5

int main(int argc, char *argv[])
{
int i, j;
float *a[r], sum;

freopen("testdata2", "r", stdin);

for(i = 0; i < r; i++)
{
  float *row = (float*)malloc(sizeof(float)*c);
  for(i = 0; i < c; i++)
{
  scanf("%f", &row[i]);
}
  a[i] = row;
}

printf("The average values for the three rows are: ");
for(i = 0; i < r; i++)
{
  sum = 0;
  for(j = 0; j < c; j++)
{
  sum += a[i][j];
}
  printf("%.2f", sum/c);
}

printf("\nThe average values for the three columns are: ");
for(i = 0; i < c; i++)
{
  sum = 0;
  for(j = 0; j < r; i++)
{
  sum += a[i][j];
}
  printf("%.2f", sum/r);
}
return 0;
}

1 个答案:

答案 0 :(得分:-1)

因为你宣布

而不正确
float *a[r] /* r = 3 */
int i;

并致电

for(i = 0; i < r; i++) {
  float *row = (float*)malloc(sizeof(float)*c);

  for(i = 0; i < c; i++) { // just write for(int i =0; i < c ; i++) {
    scanf("%f", &row[i]);  // or use j here;
  }

  a[i] = row; // i = c /* 5 */ here
              // a[4] and a[5] are not located
}

以最好的方式,你会得到错误的数据,根据内存中的一些数据; 另一种方式是你的程序会因访问冲突而崩溃,试图使用其他程序所采用的memroy

正确的方式

for(int i = 0; i < r; i++) {
    float *row = (float*)malloc(sizeof(float)*c);

    for(int j = 0; j < c; j++) { 
        scanf("%f", &row[j]);
    }

    a[i] = row;                     
}