我在编译时收到此错误:
tidemantest.c:34:27:错误:预期标识符 void mergesort(pairs,0,pair_count-1); ^ 谁能告诉我为什么?谢谢!
这是我的最小可重现示例(该赋值据说不会更改sort_pairs的函数声明,因此我将mergesort函数放入其中。主函数调用sort_pairs):
#include <cs50.h>
#include <stdio.h>
#include <string.h>
// Max number of candidates
#define MAX 9
// preferences[i][j] is number of voters who prefer i over j
int preferences[MAX][MAX];
// Each pair has a winner, loser
typedef struct
{
int winner;
int loser;
}
pair;
// Array of candidates
string candidates[MAX];
pair pairs[MAX * (MAX - 1) / 2];
int pair_count;
int candidate_count;
// Function prototypes
void sort_pairs(void);
void mergesort(int a[], int s, int e);
void merge(int *a, int s, int e);
// Sort pairs in decreasing order by strength of victory
void sort_pairs(void)
{
void mergesort(pairs, 0, pair_count - 1);
return;
}
void mergesort(int a[], int s, int e)
{
if (s >= e)
{
return;
}
int mid = (s + e) / 2;
mergesort(a, s, mid);
mergesort(a, mid + 1, e);
merge(a, s, e);
}
void merge(int *a, int s, int e)
{
int mid = (s + e) / 2;
int i = s;
int j = mid + 1;
int k = s;
int temp[100];
while (i <= mid && j <= e)
{
if (preferences[pairs[i].winner][pairs[i].loser] < preferences[pairs[j].winner][pairs[j].loser])
{
temp[k++] = a[i++];
}
else
{
temp[k++] = a[j++];
}
}
while (i <= mid)
{
temp[k++] = a[i++];
}
while (j <= e)
{
temp[k++] = a[j++];
}
for(i = s; i <= e; i++)
{
a[i] = temp[i];
}
}
答案 0 :(得分:1)
该错误通常表示预期的括号或其他语法,编译器无法理解您的意思。 在这里:
// Sort pairs in decreasing order by strength of victory
void sort_pairs(void)
{
void mergesort(pairs, 0, pair_count - 1);
return;
}
使用void表示声明,并且编译器认为您没有在其后面加上花括号来完成函数声明。删除“ void”,它应该可以工作。