2014-05-21 176 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

相關問題