Реализация очереди с использованием структурированного программирования - PullRequest
0 голосов
/ 26 сентября 2018

Я новичок в C, поэтому наш класс начинается с использования структурированного программирования.С точки зрения количества параметров все в порядке, но мне трудно понять сообщение об ошибке.При попытке вызвать enqueue и dequeue он говорит, что и int нельзя преобразовать в int *.Мне просто трудно понять указатели, когда дело доходит до структурированного программирования и передачи значений и адресов.

bool Enqueque(int queue[], int* front, int* rear, int intialSize);
int Dequeque(int queue[], int* front, int* rear);
int GetCurrentSize(int queue[], int* front, int* rear);
int toString(int queue[], int* front, int* rear);

int main()
{
    bool enqueueResult, dequeueResult, ifEmpty;
    int UserOption = 0;  
    int initialSize = 10;

    int* queue = (int*)malloc( initialSize * sizeof(int) );
    for(int i = 0; i<initialSize; i++)
        queue[i] = 0;

    int* front, rear;


    printf("This program implements Queues using structured programming. Enter "
            "a number from 1 to 4 . \n"
            "1. To enqueue a number \n"
            "2. To dequeue a number \n"
            "3. To get the current size of the queue \n"
            "4. To see the contents within the queue \n");
    scanf( "%d",UserOption );

    switch(UserOption)
    {
        case 1:
            enqueueResult = Enqueque(queue, front, rear, initialSize);

            if(enqueueResult == true)
                printf( "The number has been put into the queue!");
            else
                printf("The number was not able to be enqueued!");
            break;

        case 2:
            dequeueResult = Dequeque( queue, front, rear );

            if(dequeueResult == true)
                printf( "The number has been dequeued!");
            else
                printf("The number wasn't able to be dequeued!");
            break;

        case 3:
            printf( "The current size of the queue is: " + GetCurrentSize( queue, front, rear) );
            break;
    }
}

1 Ответ

0 голосов
/ 26 сентября 2018

Для будущих комментариев, пожалуйста, добавьте полные сообщения об ошибках и предупреждения вашего компилятора.Однако, я думаю, проблема в том, что scanf()

Вы писали:

scanf( "%d",UserOption );

scanf() нуждается в адресе переменной в качестве параметра.Поэтому вам нужно написать:

scanf( "%d",&UserOption );

Вот почему вы получаете сообщение об ошибке.Он ожидает указатель на целое число (чтобы изменить значение UserOption из функции scanf ()), но вы передаете UserOption в scanf ().То, что вы делаете, называется Передача по значению , но для scanf () требуется Передача по ссылке .Поскольку вы новичок в C, здесь краткое объяснение обоих принципов:

Передача по значению: Функция, которую вы вызываете, получает копию вашего переданного параметра.

int foo(int bar){
  ...
}

int main(void){
  int x = 5;
  foo(x);
  ...
  return 0;
}

Когда вызывается foo (), копия переменной x передается в foo.Это означает, что строка переменной функции инициализируется с содержанием x, следовательно, 5.

Передача по ссылке : вызываемая вами функция получает адрес переменной.Указатели используются для сохранения адреса в C. Поэтому в строке определения функции не объявляется как указатель на int (int *) и вызывается с адресом x (& x).

int foo(int* bar){
  ...
}

int main(void){
  int x = 5;
  foo(&x);
  ...
  return 0;
}

Когда вызывается foo (), копия адреса переменной x передается в foo.Это означает, что строка указателя функции инициализируется с адресом x.Содержимое бара теперь является адресом.Передача по ссылке используется для доступа к нефункциональным переменным из функции.Это также повышает производительность, так как вам не нужно делать отдельную копию вашего параметра.

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