我的视觉工作室出现错误:
错误C2440' =':无法转换为'播放器*' to' record :: tagField'
但是,它在Xcode上运行良好。
所以我的问题是:
1 :)为什么这不适用于Visual Studio?
2 :)我尝试编码如下:
batter.recordInfo.playerType = BATTER;
然而,它指出" BATTER"未定义。我将如何改变它的范围?
完整代码:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct record
{
enum tagField { PITCHER, BATTER } playerType;
union
{
float ERA;
float BA;
}u;
}record;
typedef struct player
{
char name[32];
int count;
int backNumber;
record recordInfo;
} player;
void sortBatter(player a[], const int size)
{
int i, j;
for (i = 0; i < size; i++)
{
float min = a[i].recordInfo.u.BA;
int subscript = i;
for (j = i + 1; j < size; j++)
{
if (a[j].recordInfo.u.BA < min)
{
min = a[j].recordInfo.u.BA;
subscript = j;
}
}
player temp = a[i];
a[i] = a[subscript];
a[subscript] = temp;
}
}
void sortPitcher(player a[], const int size)
{
int i, j;
for (i = 0; i < size; i++)
{
float min = a[i].recordInfo.u.ERA;
int subscript = i;
for (j = i + 1; j < size; j++)
{
if (a[j].recordInfo.u.ERA < min)
{
min = a[j].recordInfo.u.ERA;
subscript = j;
}
}
player temp = a[i];
a[i] = a[subscript];
a[subscript] = temp;
}
}
int main()
{
int batterSize = 5;
int pitcherSize = 5;
printf("Please input batter size : \n");
scanf("%d", &batterSize);
printf("Please input pitcher size : \n");
scanf("%d", &pitcherSize);
player * batter = (player *)malloc(batterSize*sizeof(player));
player * pitcher = (player *)malloc(pitcherSize*sizeof(player));
int i;
for (i = 0; i < batterSize; i++)
{
printf("Please input batter %d name : \n", i + 1);
scanf("%s", batter[i].name);
printf("Please input batter %d count : \n", i + 1);
scanf("%d", &(batter[i].count));
printf("Please input batter %d backNumber : \n", i + 1);
scanf("%d", &(batter[i].backNumber));
printf("Please input batter %d BA : \n", i + 1);
batter[i].recordInfo.playerType = BATTER; // @@@@ERROR HERE
scanf("%f", &(batter[i].recordInfo.u.BA));
}
for (i = 0; i < pitcherSize; i++)
{
printf("Please input pitcher %d name : \n", i + 1);
scanf("%s", pitcher[i].name);
printf("Please input pitcher %d count : \n", i + 1);
scanf("%d", &(pitcher[i].count));
printf("Please input pitcher %d backNumber : \n", i + 1);
scanf("%d", &(pitcher[i].backNumber));
printf("Please input pitcher %d ERA : \n", i + 1);
pitcher[i].recordInfo.playerType = PITCHER; //@ERROR HERE TOO
scanf("%f", &(pitcher[i].recordInfo.u.ERA));
}
sortPitcher(pitcher, pitcherSize);
sortBatter(batter, batterSize);
printf("Best Batter : ");
float previous1 = batter[0].recordInfo.u.BA;
for (i = 0; i < batterSize; i++)
{
if (batter[i].recordInfo.u.BA != previous1)
{
break;
}
printf("\n\tName : %s , BA : %.2f", batter[i].name, batter[i].recordInfo.u.BA);
}
printf("\nBest Pitcher : ");
float previous2 = pitcher[0].recordInfo.u.ERA;
for (i = 0; i < pitcherSize; i++)
{
if (pitcher[i].recordInfo.u.ERA != previous2)
{
break;
}
printf("\n\tName : %s , ERA : %.2f", pitcher[i].name, pitcher[i].recordInfo.u.ERA);
}
printf("\n");
}