работа с прототипами функций и массивами в C - PullRequest
4 голосов
/ 26 марта 2011

Я очень новичок в C, я смотрел учебники по массивам и функциям, и я начал проект.

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

Эта программа не завершена, так как я все еще добавляю к ней что-то. Вывод получается пустым, я понимаю это, потому что внутри main () нет ничего, кроме int i, j; значения типа; что мне нужно для вывода - это то, что находится под void EnterValues ​​(float dataarray [] [MAXDATACOL]) .

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

#define MAXDATACOL 5

int main(void) {
    void EnterValues(int dataarray[][MAXDATACOL]);
    int i,j;
    int values;
    while(1);
}

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

Ответы [ 3 ]

1 голос
/ 26 марта 2011

Во-первых, вы должны объявить функцию, прежде чем использовать ее.Итак, поместите объявление функции EnterValues ​​перед основным.Во-вторых, я предполагаю, что массив данных - это значение, которое вы хотите получить из функции «EnterValues».

Вам следует изменить код как

void EnterValues(float **dataarray, int *col_num);

int main(void)
{
    int i,j;
    float dataarray[MAXDATACOL][2];
    int col_num;

    EnterValues((float **)&dataarray, &col_num);
}

Надеюсь, вы знаете понятие указателя.Удачи!

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

void EnterValues(float dataarray[][MAXDATACOL]); - это прототип функции, что означает, что он используется, чтобы сообщить компилятору, что есть функция, объявленная где-то (в данном случае в том же файле C), с именем EnterValues, которая возвращает float dataarray[][MAXDATACOL] в качестве параметра и ничего не возвращает (void) прототип функции не объявляется внутри какой-либо функции, но снаружи, и он должен быть объявлен до того, как вы сможете использовать эту функцию. в противном случае компилятор не будет знать, что вы имеете в виду, когда вызываете эту функцию.

Когда вы вызываете функцию, что происходит внутри какой-то другой функции (в этом случае вы хотите вызвать EnterValues из main), вы не упоминаете, какой тип она получает / возвращает. Вы просто подчиняетесь объявлению функции (прототипа), передавая ей входные параметры правильного типа и присваивая ее возвращаемое значение переменной правильного типа.

Например:

/* This is the prototype of our function multiply */
int multiply(int arg1, int arg2);

/* This is the main function which will use multiply */
int main()
{
   int a = 4;
   int b = 3;
   int sum;
   /* here we call the function, we don't write the types it gets, but obeying the prototype */
   sum = multiply(a, b);
   return 0;
}

/* This is the implementation of the function multiply */
int multiply(int arg1, int arg2)
{
   return arg1 * arg2;
}

Поскольку я вижу много ошибок в вашем коде, я предлагаю вам прочесть книгу Язык программирования C , который не совсем новый, но очень и очень яркий. (см. этот вопрос )

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

Вы должны написать прототип функции перед main.

void EnterValues(float dataarray[][MAXDATACOL]);int main(void)

удачи :) 1004 *

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