我试图解决这个问题。
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;
}
答案 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;
}