我在C中得到错误C2440无法从int转换为int [] [2]

时间:2011-03-27 19:37:08

标签: c

我在C中得到错误C2440无法从int转换为int [] [2]

感谢任何帮助。

#include "stdafx.h"
#include "stdio.h"

#define MAXDATACOL 2

void EnterValues(int dataarray[][MAXDATACOL]);
int main(void)
{   
    int dataarray[][MAXDATACOL]=0;
    int i,j;
    int values;
}
void EnterValues(int dataarray[][MAXDATACOL])
{
    for(;;)
    {
        int i, j;
        printf( "enter the x and y values terminated by ctrl Z\n" );
        if( scanf( "%d%d", &dataarray[i], &dataarray[j] ) == EOF )
            break;
    }
}

5 个答案:

答案 0 :(得分:1)

int dataarray[][MAXDATACOL]=0;

你不能这样做是因为:

  • 0是一个数字,而dataarray是一个数组(所以是一组数字)
  • 您正在尝试修改超出范围的值。索引从0到MAXDATACOL - 1
  • 您没有指定数组的其中一个维度

答案 1 :(得分:0)

for(;;)
{
    int i,j;
    printf("enter the x and y values terminated by ctrl Z\n");
    if(scanf("%d%d",&dataarray[i],&dataarray[j])==EOF)
    break;
}

另一个问题:你需要初始化i,j的值。此外,dataarray 2D数组

答案 2 :(得分:0)

正如BlackBear所说,C阵列需要以固定大小声明。它们无法在运行时更改。 int a []之类的东西可以在函数原型中使用,因为数组的指针被传递给函数。

#define MAXDATAROW 1000
#define MAXDATACOL 2

int main(void)
{   
    int dataarray[MAXDATAROW][MAXDATACOL]={0};
}

是解决这个问题的一种方法。另一种方法是使用动态内存分配(malloc或realloc)。还有一种方法是使用可以动态调整大小的C ++容器(它们不会分配内存)。

答案 3 :(得分:0)

我可以看到你正在努力解决这个问题。如果我是你,我会声明一个点结构来保持x,y对。我还会声明一个大的固定大小缓冲区来保存用户输入的值。像这样:

#include <stdio.h>

#define MAX_COUNT 1000

typedef struct {
    int x;
    int y;
} point;

void addPoint(point points[], int *count, point item)
{
    points[*count] = item;
    (*count)++;
}

int main(void)
{
    point points[MAX_COUNT];
    point item;
    int i;
    int count = 0;

    printf("enter the x and y values terminated by ctrl Z\n");
    for(;;)
    {
        if (scanf("%d%d",&item.x,&item.y)==EOF)
            break;
        addPoint(points, &count, item);
        if (count==MAX_COUNT)
        {
            printf("Input buffer full.\n");
            break;
        }
    }

    for (i=0; i<count; i++)
        printf("x=%d, y=%d\n", points[i].x, points[i].y);

    return 0;
}

答案 4 :(得分:-1)

fugy - 如果你真的认为你上面发布的代码可能实际上有工作(一旦有人在这里整理你的编译器错误),我恐怕你有很多东西需要学习。

您尚未指定数据阵列第一维的大小。即使你拥有,将值0分配给2D数组的起始地址也是没有意义的(它已经已经在堆栈的某个地方有一个固定的不可更改的地址)

main()函数不包含对 EnterValues()的调用,因此代码永远不会执行。

根据您目前的编码能力水平,根本没有定义 EnterValues()功能。它只被调用一次,并且您给出的参数与传递的变量的名称相同,因此您可以将用户输入循环放在 main()中,以便在您使用时保持代码短正在学习。

您没有为索引下标 i j 设置任何值。即使你拥有,他们也不会做你想要的,因为他们都会引用第一个维度。显然,您希望将值读入 second 维度中的两个连续元素。

在用户最终按下^ Z之前,您没有规定允许的最大输入对数量,我怀疑您甚至不理解为什么这是一个问题。

我建议您在处理多维数组和动态存储分配以输入不确定大小之前,先完成更多非常简单的编码练习。这些是相对先进的技术,除非您对基础知识有更深入的了解,否则您不太可能理解此处给出的任何代码更正。

相关问题