2014-05-21 129 views
-2

我写了这个代码prim的算法piesese,我得到这个错误:“预期的标识符或'('之前'int'”。我有一个头文件,主和另一个.c文件。 这是错误:“s algoritm 2 \ prim.h | 6 |错误:预期的标识符或'('之前'int'| s algoritm” 任何人都可以告诉我为什么会出现此错误?预期的标识符或'('之前'int'

头文件

#ifndef prim 
#define prim 
#define nmax 10 

void prim(int mat[nmax][nmax],int x,int n ,int m); 

#endif // graphs 

PRIM.c文件

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


void prim(int mat[nmax][nmax], int x, int n, int m) 
{ 
int viz[nmax], u, v, min, total = 0; 
int i, j, counter; 

for(i = 0; i < n; i++) 
{ 
    viz[i] = 0; 
} 

viz[x] = 1; 

for(counter = 0; counter < m; counter++) 
{ 
    min = 999; 

    for(i = 0; i < n; i++) 
    { 
     if(viz[i]==1) 
     { 
      for(j = 0; j < n; j++) 
      { 
       if(viz[j]!=1) 
       { 
        if(min > mat[i][j]) 
        { 
         min = mat[i][j]; 
         u = i; 
         v = j; 
         } 
        } 
       } 
      } 
     } 

     viz[v] = 1; 
     total += min; 
     printf("\nMuchie gasita de la %d -> %d de weight %d", u, v, min); 

    } 

    printf("\nDimensiunea arborelui de acoperire minim: ", total); 

} 

main.c文件

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

void main() 
{ 
    FILE *fin; 
    char sursa[20]; 
    int mat[nmax][nmax], n, m, i, j, x; 

    printf("\nIntroduceti fisierul sursa: "); 
    gets(sursa); 

    fin = fopen(sursa, "r"); 
    if(fin == NULL) 
    { 
     perror("\nEroare la deschiderea fisierului!"); 
     exit(-1); 
    } 

    fscanf(fin, "%d %d", &n, &m); 

    for(i = 0; i < n; i++) 
    { 
     for(j = 0; j < n; j++){ 

      fscanf(fin, "%d", &mat[i][j]); 

      if(mat[i][j] == 0) 
     {  
      mat[i][j] = 999; 
     } 
      fprintf(stdout, " %3d ", mat[i][j]); 
    } 
    fprintf(stdout, "\n"); 
} 

printf("\nIntroduceti nodul sursa: "); 
scanf("%d", &x); 

prim(mat, x, n, m); 
} 
+0

请显示整个错误消息,在你的问题 – Marcin

+1

不是***在你的问题***。阅读该评论很难!你应该[**编辑**](http://stackoverflow.com/posts/23789100/edit)你的问题把错误本身的问题! – abelenky

+0

您需要重新格式化第一段以突出显示错误消息(这对我来说似乎很奇怪)。顺便说一句,它是*算法*。 – didierc

回答

6

你在你的头文件#定义prim,然后在程序中使用这个词。预处理器并不关心它的含义,它只是根据您的#define指令替换它,在这种情况下没有任何内容。

尽量避免使用小写字母和简单的术语作为#define值(尽量避免#define,除非你知道如何使用它们),它会导致这种情况。对于初学者,请将#define更改为大写字母

+0

谢谢你的回答 – sixfeet

0

删除.h文件中的第一行后,代码会在MS VISUAL 2010中编译。我没有做任何其他更改。也许你应该尝试改变你的编译器。

+0

是的,也许这就是问题所在。感谢您的建议! – sixfeet

1

的问题是在头文件:

#ifndef prim 
#define prim 
#define nmax 10 

void prim(int mat[nmax][nmax],int x,int n ,int m); 

#endif // graphs 

它看起来像你试图建立一个包括后卫,但你重新使用prim;这是一个问题,因为现在每次预处理器会看到prim在源代码中,它会与一个空字符串替换它,所以你的函数声明成为

void (int mat[10][10],int x, int m ,int m); 

和清晰度变得

void (int mat[10][10], int x, int n, int m) 
{ 
int viz[10], u, v, min, total = 0; 
... 

main函数调用变得

(mat, x, n, m); 

为包括警卫常见的做法是使用全部大写用_H后缀,所以你的标题应该写成

#ifndef PRIM_H 
#define PRIM_H 
#define nmax 10 

void prim(int mat[nmax][nmax], int x, int n, int m); 

#endif // PRIM_H 
+0

这是问题!非常感谢! :d – sixfeet

相关问题