visual studio无法转换

时间:2016-03-16 15:16:41

标签: c visual-studio

我的视觉工作室出现错误:

错误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");

}

0 个答案:

没有答案
相关问题