ошибка с .data файлом, C [закрыто]

Я пытался скомпилировать программу на C, которая получает данные из файла .data.К сожалению, я всегда получаю следующее сообщение: input.dat.2:1:error: expected identifier or "(" before numeric constant Я использую 2014 версию Ubuntu Linux.На самом деле, это моя первая программа в среде Linux.Это домашнее задание для моего университета.Эта же программа работала на windows dev-C++! Вот программа:

#include <stdio.h>
#include "input.dat"
#define NUM_NODES                          100
#define NONE                               9999
#include<csdl_queue.h>
#include<cdsl_deque.h>
#include<cdsl_dyn_array.h>

struct _NODE
{
  int iDist;
  int iPrev;
};
typedef struct _NODE NODE;

struct _QITEM
{
  int iNode;
  int iDist;
  int iPrev;
  struct _QITEM *qNext;
};
typedef struct _QITEM QITEM;

QITEM *qHead = NULL;

int AdjMatrix[NUM_NODES][NUM_NODES];

int g_qCount = 0;
NODE rgnNodes[NUM_NODES];
int ch;
int iPrev, iNode;
int i, iCost, iDist;


void print_path (NODE *rgnNodes, int chNode)
{
  if (rgnNodes[chNode].iPrev != NONE)
    {
      print_path(rgnNodes, rgnNodes[chNode].iPrev);
    }
  printf (" %d", chNode);
  fflush(stdout);
}


void enqueue (int iNode, int iDist, int iPrev)
{
  QITEM *qNew = (QITEM *) malloc(sizeof(QITEM));
  QITEM *qLast = qHead;

  if (!qNew) 
    {
      fprintf(stderr, "Out of memory.\n");
      exit(1);
    }
  qNew->iNode = iNode;
  qNew->iDist = iDist;
  qNew->iPrev = iPrev;
  qNew->qNext = NULL;

  if (!qLast) 
    {
      qHead = qNew;
    }
  else
    {
      while (qLast->qNext) qLast = qLast->qNext;
      qLast->qNext = qNew;
    }
  g_qCount++;

}


void dequeue (int *piNode, int *piDist, int *piPrev)
{
  QITEM *qKill = qHead;

  if (qHead)
    {

      *piNode = qHead->iNode;
      *piDist = qHead->iDist;
      *piPrev = qHead->iPrev;
      qHead = qHead->qNext;
      free(qKill);
      g_qCount--;
    }
}


int qcount (void)
{
  return(g_qCount);
}

int dijkstra(int chStart, int chEnd) 
{



  for (ch = 0; ch < NUM_NODES; ch++)
    {
      rgnNodes[ch].iDist = NONE;
      rgnNodes[ch].iPrev = NONE;
    }

  if (chStart == chEnd) 
    {
      printf("Shortest path is 0 in cost. Just stay where you are.\n");
    }
  else
    {
      rgnNodes[chStart].iDist = 0;
      rgnNodes[chStart].iPrev = NONE;

      enqueue (chStart, 0, NONE);

     while (qcount() > 0)
    {
      dequeue (&iNode, &iDist, &iPrev);
      for (i = 0; i < NUM_NODES; i++)
        {
          if ((iCost = AdjMatrix[iNode][i]) != NONE)
        {
          if ((NONE == rgnNodes[i].iDist) || 
              (rgnNodes[i].iDist > (iCost + iDist)))
            {
              rgnNodes[i].iDist = iDist + iCost;
              rgnNodes[i].iPrev = iNode;
              enqueue (i, iDist + iCost, iNode);
            }
        }
        }
    }

      printf("Shortest path is %d in cost. ", rgnNodes[chEnd].iDist);
      printf("Path is: ");
      print_path(rgnNodes, chEnd);
      printf("\n");
    }
}

int main() {
  int i,j,k;
  FILE *fp;

  fp=fopen("input.dat","r");
  /* open the adjacency matrix file */
  /* make a fully connected matrix */
  for (i=0;i<NUM_NODES;i++) {
    for (j=0;j<NUM_NODES;j++) {
      /* make it more sparce */
      fscanf(fp,"%d",&k);
    AdjMatrix[i][j]= k;
    }
  }

  /* finds 10 shortest paths between nodes */
  for (i=0,j=NUM_NODES/2;i<20;i++,j++) {
            j=j%NUM_NODES;
      dijkstra(i,j);
  }
  fclose(fp);
  exit(0);


}

Программа, вероятно, работает, так как она была предоставлена нам преподавателями. input.dat состоит только из чисел. Я предполагаю, что система Ububtu как-то ответственна за это. Почему процесс компиляции терпит неудачу? Я буду благодарен, если кто-нибудь сможет помочь мне!

0
задан 3 June 2015 в 17:25

1 ответ

Удалите вторую строку из своей программы:

#include "input.dat"

Эта строка заставит входной файл быть считанным компилятором. Путем Вы объяснили его, входной файл не является никаким кодом C, и поэтому не скомпилирует.

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

<час>

, Если Вы говорите, та же программа работала над Windows, Вы подразумеваете, что тот же самый код работал над Windows? Это действительно удивило бы меня, поскольку только числа не являются C, неважно, какая платформа Вы идете.

0
ответ дан 3 June 2015 в 17:25

Другие вопросы по тегам:

Похожие вопросы: