error con el archivo .data, C

error con el archivo .data, C

He estado intentando compilar un programa en C que recibe datos de un archivo .data. Desafortunadamente, siempre recibo el siguiente mensaje: input.dat.2:1:error: identificador esperado o "(" antes de la constante numérica. Estoy usando el Versión 2014 de Ubuntu Linux. En realidad, este es mi primer programa en el entorno Linux. Es tarea para mi universidad. ¡El mismo programa funcionó para 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);


}

El programa probablemente funcione, tal como nos lo otorgaron los profesores. El input.dat está compuesto solo de números. Supongo que el sistema Ububtu es de alguna manera responsable. ¿Por qué falla el proceso de compilación? Estaría agradecido si alguien pudiera ayudar ¡a mí!

Respuesta1

Elimine la segunda línea de su programa:

#include "input.dat"

Esta línea hará que el compilador lea el archivo de entrada. Según lo explicaste, el archivo de entrada no es código C y, por lo tanto, no se compilará.

Sin embargo, el archivo de entrada no debe incluirse en su programa, sino leerse desde el sistema de archivos en tiempo de ejecución.


Si dice que el mismo programa funcionó en Windows, ¿quiere decir que exactamente el mismo código funcionó en Windows? Eso realmente me sorprendería, ya que solo los números no son C, sin importar en qué plataforma te encuentres.

información relacionada