Я получаю ошибку C2440 в C. не могу преобразовать из int в int [] [2] - PullRequest
1 голос
/ 27 марта 2011

Я получаю ошибку C2440 в C. не могу преобразовать из 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 ]

1 голос
/ 27 марта 2011
int dataarray[][MAXDATACOL]=0;

Вы не можете сделать это, потому что:

  • 0 - это число, в то время как массив данных - это массив (то есть набор чисел)
  • , который вы пытаетесь изменитьзначение вне диапазона.Индексы идут от 0 до MAXDATACOL - 1
  • вы не указываете одно из измерений массива
0 голосов
/ 28 марта 2011

fugy - если вы действительно подумали, что код, который вы разместили выше, на самом деле может иметь сработало (как только кто-то здесь разобрался с вашей ошибкой компилятора), я боюсь, вам нужно многому научиться.* Вы не указали размер первого измерения вашего массива данных.Даже если у вас было , было бы бессмысленно назначать значение 0 начальному адресу двумерного массива (у него уже есть фиксированный неизменяемый адрес где-то в стеке).

Ваша функция main () не содержит вызова EnterValues ​​() , поэтому код никогда не будет выполняться.

При текущем уровне кодированиянет никакого смысла в определении функции EnterValues ​​() вообще.Он вызывается только один раз, и вы дали параметру то же имя, что и передаваемой переменной, так что вы могли бы также поместить цикл пользовательского ввода в main () , чтобы код был коротким, пока вы 'повторное изучение.

Вы не задаете никаких значений для своих индексов i и j .Даже если у вас было , они бы не делали то, что вы хотите, потому что они оба ссылались бы на измерение first .Очевидно, что вы хотите прочитать значения в два последовательных элемента в измерении second .

Вы не указали максимальное количество входных пар, допустимое до того, как пользователь наконец нажмет ^ Z, и яподозреваю, что вы даже не понимаете, почему это является проблемой.

Я предлагаю вам пройти гораздо больше очень простых упражнений по кодированию, прежде чем заняться многомерными массивами и динамическим выделением памяти для вводанеопределенный размер.Это относительно продвинутые методы, и вряд ли вы поймете какие-либо исправления кода, приведенные здесь, пока не получите более четкого понимания основ.

0 голосов
/ 28 марта 2011

Я вижу, что вы немного боретесь с этим.На вашем месте я бы объявил структуру точек для хранения пар х, у.Я также объявил бы большой буфер фиксированного размера для хранения значений в качестве ввода пользователем.Как то так:

#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;
}
0 голосов
/ 27 марта 2011

Как отметил BlackBear, массивы C должны быть объявлены с фиксированным размером. Они не могут измениться во время выполнения. Что-то вроде int a [] можно использовать в прототипе функции, потому что указатель на массив передается функции.

#define MAXDATAROW 1000
#define MAXDATACOL 2

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

Это один из способов справиться с этим. Другой способ - использование динамического выделения памяти (malloc или realloc). Еще один способ - использовать контейнеры C ++, которые могут динамически изменять размер (они выделяют память под капотом).

0 голосов
/ 27 марта 2011
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 массив .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...