我的代码没有在离线编译器上提供正确的输出?

My code is not giving proper out put on offline compilers?

我对编码还很陌生,但我在使用所有编译器和 IDE 时遇到了一些问题。每当我尝试在 vs 代码或代码块中编译我的 c 代码时,它都不会提供适当的或特定的所需输出,当我在在线编译器上使用相同的代码时,我会得到完美的输出。 例如,`下面的代码在 VS Code 中打印 Hello 并退出,但在在线编译器中它的执行方式完全相同。我不知道这是编译器问题还是 IDE 问题,但如果有人知道,请回答。我只在c语言代码中遇到过这种情况,在c++中它工作正常。

#include <stdio.h>
#include <stdlib.h>

typedef struct node
{

  int info;

  struct node *next;

} node;

typedef struct
{

  node *front;

  node *rear;

} queue;

void
createqueue (queue * q)
{

  q->front = q->rear = NULL;

}

int
isempty (queue * q)
{

  if (q->front == NULL)

    return 1;

  return 0;

}


void
enqueue (queue * q, int val)
{

  node *p = (node *) malloc (sizeof (node));

  p->info = val;

  p->next = NULL;

  if (isempty (q))

    q->front = q->rear = p;

  else
    {

      q->rear->next = p;

      q->rear = p;

    }

}


int
dequeue (queue * q)
{

  int t;

  t = (q->front)->info;

  node *p = (node *) malloc (sizeof (node));

  p = q->front;

  if (q->front == q->rear)

    q->front = q->rear = NULL;

  else

    q->front = (q->front)->next;

  free (p);

  return t;

}


int
queuefront (queue * q)
{

  int t;

  t = q->front->info;

  return t;

}


void
traverse (queue * q)
{

  node *p = (node *) malloc (sizeof (node));

  printf ("\n Queue is: ");
  p = q->front;

  while (p != NULL)
    {

      printf ("=>%d ", p->info);

      p = p->next;

    }

}


int
main ()
{


  int choice, info, d, val;

  queue *q;

  printf ("hello\n");

  createqueue (q);


  do

    {

      printf ("\n MENU \n");

      printf ("\n 1.ENQUEUE \n");

      printf ("\n 2.DEQUEUE \n");

      printf ("\n 3.FRONT \n");

      printf ("\n 4.TRAVERSE \n");

      printf ("\n 5.EXIT \n");

      printf ("\n ENTER YOUR CHOICE: ");

      scanf ("%d", &choice);


      switch (choice)

    {

    case 1:

      printf ("enter the value");

      scanf ("%d", &val);

      enqueue (q, val);

      break;


    case 2:

      if (isempty (q))

        {

          printf ("Queue is empty");

          break;

        }

      info = dequeue (q);

      printf ("%d ", info);

      break;

    case 3:

      if (isempty (q))

        {

          printf ("Queue is empty");

          break;

        }

      d = queuefront (q);

      printf ("front= %d \n", d);

      break;

    case 4:

      if (isempty (q))

        {

          printf ("Queue is empty");

          break;

        }

      traverse (q);

      break;

    case 5:

      exit (0);

      break;

    }

    }
  while (choice > 0 && choice < 5);

  return 0;

}
`
queue *q;         // uninitialized pointer
createqueue (q);  // function tries to dereference it.

你必须q指向某处

您还应该学习如何使用 IDE 进行调试——调试器会立即告诉您程序退出的原因(实际上它没有退出,它崩溃了)。