鱼C论坛

 找回密码
 立即注册
查看: 3656|回复: 11

请问error C2059: syntax error : '}' 这个错误怎么解决?

[复制链接]
发表于 2016-9-7 12:10:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zorodream 于 2016-9-7 19:36 编辑
#include <stdio.h>
#include <time.h>
#include <ctype.h>
#include <stdlib.h>
#define BELL '\a'
#define DEALER 0
#define PLAYER 1
#define ACELOW 0
#define ACEHIGH 1

int askedForName = 0;

void dispTitle(void);

void initCardsScreen(int cards[52],
                                         int playerPoints[2],
                                         int dealerPoints[2],
                                         int total[2],
                                         int * numCards);
int dealCard(int *numCards,int cards[52]);
void dispCard(int cardDrawn,int points[2]);
void totalIt(int points[2],int total[2],int who);
void dealerGetsCard(int *numCards,int cards[52],int dealerPoints[2]);
void playersGetsCard(int *numCards,int cards[52],int playerPoints[2]);
char getAns(char mesg[]);
void findWinner(int total[2]);

main ()

{
        int numCards;
        int cards[52],playerPoints[2],dealerPoints[2],total[2];
        char ans;
        do
        {
                initCardsScreen(cards[52],
                        playerPoints[2],
                        dealerPoints[2],
                        total[2],
                        &numCards);
                dealerGetsCard (&numCards,cards,dealerPoints);
                printf("\n");
                playersGetsCard(&numCards,cards,playerPoints);
                playersGetsCard(&numCards,cards,playerPoints);
                
                do
                {
                        ans = getAns("Hit or stand(H/S)?");
                        if (ans == 'H')
                        {
                                        playersGetsCard(&numCards,cards,playerPoints);
                        }
                        
                }while (ans != 'S');

                totalIt(playerPoints,total,PLAYER);

                do
                {
                        dealerGetsCard (&numCards,cards,dealerPoints);
                }
                while (dealerPoints[ACEHIGH]<17);
                totalIt(dealerPoints,total,DEALER);
                findwinner(total);
                ans = getAns("\nPlay again (Y/N) ? ");        
        }
        while (ans == 'Y');
        return ;
}




void initCardsScreen(int cards[52],
                                         int playerPoints[2],
                                         int dealerPoints[2],
                                         int total[2],
                                         int *numCards);
{
        int sub,val = 1;
        char firstName[15];
        *numCards = 52;
        for (sub = 0; sub <= 51; sub++)
        {
                val = (val == 14) ? 1 : val;
                cards[sub] = val;
                val++;
        }
        for (sub = 0; sub <= 1; sub++)
        {
                playerPoints[sub] = dealerPoints[sub] = total[sub] = 0;
        }
        dispTitle();
        if (askedForName == 0)
        {
                printf("\nWhat is your first name?");
                scanf("%s",firstName);
                askedForName = 1;
                printf("OK, %s, get ready for casino action!\n\n",firstName);
                getchar();
        }
        return;
}

/*这个功能给玩家一张牌并更新玩家的点数*/

void playersGetsCard(int *numCards,int cards[52],int playerPoints[2]);
{
        int newCard;
        newCard = dealCard(numCards,cards);
        printf("You draw : ");
        dispCard(newCard,playerPoints);
}

/*这个功能给dealer一张牌并更新dealer的点数*/

void dealerGetsCard(int *numCards,int cards[52],int dealerPoints[2]);
{
        int newCard;
        newCard = dealCard(numCards,cards);
        printf("The dealer draws : ");
        dispCard(newCard,playerPoints);
}

/*这个功能从桌上得到一张牌并且把它存在庄家或者玩家的分数中*/

int dealCard(int *numCards,int cards[52]);
{
        int cardDrawn,subDraw;
        time_t t;
        srand(time(&t));
        subDraw = ( rand() % (*numCards));
        cardDrawn = cards[subDraw];
        cards[subDraw] = cards[*numCards-1];
        (*numCards)-;
        return cardDrawn;
}

/*展示最后发出的牌并且更新点数*/

void dispCard(int cardDrawn,int points[2]);
{
        switch (cardDrawn)
        {
        case(11):        printf("%s\n,"Jack");
                                points[ACELOW] += 10;
                                points[ACEHIGH] += 10;
                                braeak;
        case(12):        printf("%s\n,"Queen");
                                points[ACELOW] += 10;
                                points[ACEHIGH] += 10;
                                braeak;
        case(13):        printf("%s\n,"King");
                                points[ACELOW] += 10;
                                points[ACEHIGH] += 10;
                                braeak;
        default :         points[ACELOW] += cardDrawn;
                if (cardDrawn == 1)
                {
                        printf("%s\n,"ACE");
                        points[ACEHIGH] += 11;
                }
                else 
                {
                        points[ACEHIGH] += cardDrawn;
                        printf("%D\n",cardDrawn);
                }
        }
        return ;
}

/*计算出玩家或者庄家的总点数,并判断谁是赢家。考虑到 A 是1或者11.*/

void totalIt(int points[2],int total[2],int who);
{
        if ((points[ACELOW] == points[ACEHIGH]) || (points[ACEHIGH] > 21))
        {
                total[who] = points[ACELOW];
        }
        else 
        {
                total[who] = points[ACEHIGH];
        }
        if (who ==PLAYER)
        {
                printf("You have a total of %d\n\n",total[PLAYER]);
        }
        else
        {
                printf("The house stands with a total of %d\n\n",total[DEALER]);
        }
        return ;
}


/*打印出赢家*/

void findWinner(int total[2]);
{
        if (total[DEALER] == 21)
        {
                printf("The house wins.\n");
                return ;
        }
        if (total[DEALER] > 21) && (total[PLAYER] > 21)
        {
                printf("%s","Nobody wins.\n");
                return ;
        }
        if (total[DEALER] >= total[PLAYER]) && (total[DEALER] < 21)
        {
                printf("The house wins.\n");
                return ;
        }
        printf("%s%c","You win!\n");
        return ;
}
/*21  */

char getAns(char mesg[]);
{
        char ans;
        printf("%s",mesg);
        ans = getchar();
        getchar();
        return toupper(ans);
}  /*错误指向这一行*/


/*清除屏幕*/

void dispTitle(void)
{
        int i = 0;
        while (i < 25)
        {
                printf("\n");
                i++;
        }
        printf("\n\n*Step right up to the Blackjack tables*\n\n");
        return ;
}



大家好,这个代码有点长,我打了一个上午。。。是一个关于21点小游戏的代码,最后运行的时候提示的错误是  
error C2059: syntax error : '}'
执行 cl.exe 时出错.


但是我重新打了一遍{},都没有解决,请大家帮我上机运行一下,看看到底是哪里错了
真的很谢谢了,不能上机的如果眼睛能看出来就真是太厉害了!!







Hepburn.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-7 13:19:53 | 显示全部楼层
char getAns(char mesg[]);//……错误指向这一行
{
        char ans;
        printf("%s",mesg);
        ans = getchar();
        getchar();
        return toupper(ans);
}  /*错误指向这一行*/
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-7 13:43:01 | 显示全部楼层
楼上正解,220行明显多了个逗号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-7 13:57:21 | 显示全部楼层
调试呗,一步步执行一定可以找出错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-7 19:00:43 | 显示全部楼层
可是 还是没有解决啊...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-7 19:30:39 | 显示全部楼层
啊啊啊啊,呼叫版主,我手抖的点了”已经解决”啊~~~~~~~
并没有解决···
咋办
跪求!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-7 21:05:21 | 显示全部楼层
本帖最后由 mingcxx 于 2016-9-7 21:20 编辑

再看看。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-9-7 21:24:09 | 显示全部楼层
mingcxx 发表于 2016-9-7 21:05
主要是多处的语法错误,修正以后剩下一个未定义标识符playerPoints(做了注释),你看看能改不:

你好,首先感谢你的耐心和指导!
在代码的第15行  不是定义了playerPoints吗?是一个数组。
还有,这个程序是一个21点的小游戏。是看的一本外国的教材。这个程序是书后附录的一个代码程序。
Greg Perry写的

不过话说,还是国内的教材扎实点,这老外写的我感觉太浅了。图画多于字。

再次感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-7 21:25:27 | 显示全部楼层

多谢你的耐心~
再次感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-7 21:33:53 | 显示全部楼层
zorodream 发表于 2016-9-7 21:25
多谢你的耐心~
再次感谢

改完了,主要是多处的语法错误。最后剩下俩,我不太明白,就没改:函数findwinner()未定义和变量playerPoints未定义,做了注释,你看一下能改不:
#include <stdio.h>
#include <time.h>
#include <ctype.h>
#include <stdlib.h>
#define BELL '\a'
#define DEALER 0
#define PLAYER 1
#define ACELOW 0
#define ACEHIGH 1

int askedForName = 0;

void dispTitle(void);

void initCardsScreen(int cards[52],
        int playerPoints[2],
        int dealerPoints[2],
        int total[2],
        int * numCards);
int dealCard(int *numCards, int cards[52]);
void dispCard(int cardDrawn, int points[2]);
void totalIt(int points[2], int total[2], int who);
void dealerGetsCard(int *numCards, int cards[52], int dealerPoints[2]);
void playersGetsCard(int *numCards, int cards[52], int playerPoints[2]);
char getAns(char mesg[]);
void findWinner(int total[2]);

int main(void)

{
        int numCards;
        int cards[52], playerPoints[2], dealerPoints[2], total[2];
        char ans;
        do
        {
                initCardsScreen(cards,
                        playerPoints,
                        dealerPoints,
                        total,
                        &numCards);
                dealerGetsCard(&numCards, cards, dealerPoints);
                printf("\n");
                playersGetsCard(&numCards, cards, playerPoints);
                playersGetsCard(&numCards, cards, playerPoints);

                do
                {
                        ans = getAns("Hit or stand(H/S)?");
                        if (ans == 'H')
                        {
                                playersGetsCard(&numCards, cards, playerPoints);
                        }

                } while (ans != 'S');

                totalIt(playerPoints, total, PLAYER);

                do
                {
                        dealerGetsCard(&numCards, cards, dealerPoints);
                } while (dealerPoints[ACEHIGH]<17);
                totalIt(dealerPoints, total, DEALER);
                findwinner(total);                                //函数findwinner()未定义
                ans = getAns("\nPlay again (Y/N) ? ");
        } while (ans == 'Y');
        return 0;
}




void initCardsScreen(int cards[52], int playerPoints[2], int dealerPoints[2], int total[2], int *numCards)
{
        int sub, val = 1;
        char firstName[15];
        *numCards = 52;
        for (sub = 0; sub <= 51; sub++)
        {
                val = (val == 14) ? 1 : val;
                cards[sub] = val;
                val++;
        }
        for (sub = 0; sub <= 1; sub++)
        {
                playerPoints[sub] = dealerPoints[sub] = total[sub] = 0;
        }
        dispTitle();
        if (askedForName == 0)
        {
                printf("\nWhat is your first name?");
                scanf("%s", firstName);
                askedForName = 1;
                printf("OK, %s, get ready for casino action!\n\n", firstName);
                getchar();
        }
        return;
}

/*这个功能给玩家一张牌并更新玩家的点数*/

void playersGetsCard(int *numCards, int cards[52], int playerPoints[2])
{
        int newCard;
        newCard = dealCard(numCards, cards);
        printf("You draw : ");
        dispCard(newCard, playerPoints);
}

/*这个功能给dealer一张牌并更新dealer的点数*/

void dealerGetsCard(int *numCards, int cards[52], int dealerPoints[2])
{
        int newCard;
        newCard = dealCard(numCards, cards);
        printf("The dealer draws : ");
        dispCard(newCard, playerPoints);                //playerPoints未定义,且playerPoints类型错误,如果有playerPoints,应该写&playerPoints
}

/*这个功能从桌上得到一张牌并且把它存在庄家或者玩家的分数中*/

int dealCard(int *numCards, int cards[52])
{
        int cardDrawn, subDraw;
        time_t t;
        srand((unsigned int)time(&t));
        subDraw = (rand() % (*numCards));
        cardDrawn = cards[subDraw];
        cards[subDraw] = cards[*numCards - 1];
        (*numCards)--;
        return cardDrawn;
}

/*展示最后发出的牌并且更新点数*/

void dispCard(int cardDrawn, int points[2])
{
        switch (cardDrawn)
        {
        case(11) : printf("%s\n","Jack");
                points[ACELOW] += 10;
                points[ACEHIGH] += 10;
                break;
        case(12) : printf("%s\n","Queen");
                points[ACELOW] += 10;
                points[ACEHIGH] += 10;
                break;
        case(13) : printf("%s\n","King");
                points[ACELOW] += 10;
                points[ACEHIGH] += 10;
                break;
        default:         
                points[ACELOW] += cardDrawn;
                if (cardDrawn == 1)
                {
                        printf("%s\n","ACE");
                        points[ACEHIGH] += 11;
                }
                else
                {
                        points[ACEHIGH] += cardDrawn;
                        printf("%D\n", cardDrawn);
                }
        }
        return;
}

/*计算出玩家或者庄家的总点数,并判断谁是赢家。考虑到 A 是1或者11.*/

void totalIt(int points[2], int total[2], int who)
{
        if ((points[ACELOW] == points[ACEHIGH]) || (points[ACEHIGH] > 21))
        {
                total[who] = points[ACELOW];
        }
        else
        {
                total[who] = points[ACEHIGH];
        }
        if (who == PLAYER)
        {
                printf("You have a total of %d\n\n", total[PLAYER]);
        }
        else
        {
                printf("The house stands with a total of %d\n\n", total[DEALER]);
        }
        return;
}


/*打印出赢家*/

void findWinner(int total[2])
{
        if (total[DEALER] == 21)
        {
                printf("The house wins.\n");
                return;
        }
        if (total[DEALER] > 21 && total[PLAYER] > 21)
        {
                printf("%s", "Nobody wins.\n");
                return;
        }
        if (total[DEALER] >= total[PLAYER] && total[DEALER] < 21)
        {
                printf("The house wins.\n");
                return;
        }
        printf("%s%c", "You win!\n");
        return;
}
/*21  */

char getAns(char mesg[])
{
        char ans;
        printf("%s", mesg);
        ans = getchar();
        getchar();
        return toupper(ans);
}  /*错误指向这一行*/


/*清除屏幕*/

void dispTitle(void)
{
        int i = 0;
        while (i < 25)
        {
                printf("\n");
                i++;
        }
        printf("\n\n*Step right up to the Blackjack tables*\n\n");
        return;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-9-7 21:38:03 | 显示全部楼层
zorodream 发表于 2016-9-7 21:24
你好,首先感谢你的耐心和指导!
在代码的第15行  不是定义了playerPoints吗?是一个数组。
还有,这个 ...

那不是一个函数原型的声明吗:
void initCardsScreen(...)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-8 13:01:32 | 显示全部楼层
mingcxx 发表于 2016-9-7 21:33
改完了,主要是多处的语法错误。最后剩下俩,我不太明白,就没改:函数findwinner()未定义和变量playerPo ...

谢谢  真的很谢谢
可以成功运行了,不过运行的结果和想象的有差别,应该是源码的问题
真的  再次感谢!~~~
看来出现error C2059: syntax error : '}' 这个错误  一般是有语法错误呢
谢谢你~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 11:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表