我为prim的算法编写了这段代码,我收到了这个错误:"期望的标识符或'('之前' int'"我有一个头文件,一个主文件和另一个.c文件。 这是错误:" s算法2 \ prim.h | 6 |错误:预期的标识符或'('在' int' | s algoritm" 谁能告诉我为什么会收到这个错误?
HEADER文件
#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 :(得分:6)
您在头文件中#define prim
,然后在您的程序中使用该术语。预处理器并不关心它在那里意味着什么,它只是根据你的#define
指令替换它,在这种情况下什么也没有。
尽量避免使用小写字母和简单术语作为#define值(除非你知道如何使用它们,否则尽量避免使用#define),这会导致这种情况。首先,将#defines更改为大写字母
答案 1 :(得分: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
答案 2 :(得分:0)
删除.h文件中的第一行后,代码在MS VISUAL 2010中编译。我没有进行任何其他更改。也许您应该尝试更改编译器。