C Error: expression must have arithmetic or pointer type
C Error: expression must have arithmetic or pointer type
typedef struct node
{
Record data;
struct node *next;
}Node;
Node *head = NULL;
void addRecord(Record x)
{
Node *previousNode = NULL;
Node *newNode;
Node *n;
newNode = (Node*)malloc(sizeof(Node));
newNode->data = x;
newNode->next = NULL;
if (head == NULL) // The list is empty
{
head = newNode;
}
else // The list is not empty
{
n = head;
while (n->next != NULL)
{
***if (n->data < newNode->data && n->next->data > newNode->data)*** // Insertion Sort
{
// We have to put it between these 2 nodes
newNode->next = n->next;
n->next = newNode;
return;
}
else
{
previousNode = n;
n = n->next;
}
}
n->next = newNode;
}
}
我在插入排序的 if 函数中的代码中有这个错误。该程序说 'n' 必须具有算术或指针类型。好像是什么问题?
C 中不支持运算符重载,因此您不能使用 >
运算符比较 Record
,除非它 typedef
ed 为 int
或其他算术或指针类型.
要比较结构之类的东西,定义比较函数并使用它。
示例:
typedef struct {
int a, b;
} Record;
/*
return positive value if *x > *y
return negative value if *x < *y
return 0 if *x == *y
*/
int cmpRecord(const Record* x, const Record* y) {
if (x->a + x->b > y->a + y->b) return 1;
if (x->a + x->b < y->a + y->b) return -1;
return 0;
}
/* ... */
while (n->next != NULL)
{
if (cmpRecord(&n->data, &newNode->data) < 0 && cmpRecord(&n->next->data, &newNode->data) > 0) // Insertion Sort
{
/* ... */
typedef struct node
{
Record data;
struct node *next;
}Node;
Node *head = NULL;
void addRecord(Record x)
{
Node *previousNode = NULL;
Node *newNode;
Node *n;
newNode = (Node*)malloc(sizeof(Node));
newNode->data = x;
newNode->next = NULL;
if (head == NULL) // The list is empty
{
head = newNode;
}
else // The list is not empty
{
n = head;
while (n->next != NULL)
{
***if (n->data < newNode->data && n->next->data > newNode->data)*** // Insertion Sort
{
// We have to put it between these 2 nodes
newNode->next = n->next;
n->next = newNode;
return;
}
else
{
previousNode = n;
n = n->next;
}
}
n->next = newNode;
}
}
我在插入排序的 if 函数中的代码中有这个错误。该程序说 'n' 必须具有算术或指针类型。好像是什么问题?
C 中不支持运算符重载,因此您不能使用 >
运算符比较 Record
,除非它 typedef
ed 为 int
或其他算术或指针类型.
要比较结构之类的东西,定义比较函数并使用它。
示例:
typedef struct {
int a, b;
} Record;
/*
return positive value if *x > *y
return negative value if *x < *y
return 0 if *x == *y
*/
int cmpRecord(const Record* x, const Record* y) {
if (x->a + x->b > y->a + y->b) return 1;
if (x->a + x->b < y->a + y->b) return -1;
return 0;
}
/* ... */
while (n->next != NULL)
{
if (cmpRecord(&n->data, &newNode->data) < 0 && cmpRecord(&n->next->data, &newNode->data) > 0) // Insertion Sort
{
/* ... */