鱼C论坛

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

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

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

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

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

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

  10. int askedForName = 0;

  11. void dispTitle(void);

  12. void initCardsScreen(int cards[52],
  13.                                          int playerPoints[2],
  14.                                          int dealerPoints[2],
  15.                                          int total[2],
  16.                                          int * numCards);
  17. int dealCard(int *numCards,int cards[52]);
  18. void dispCard(int cardDrawn,int points[2]);
  19. void totalIt(int points[2],int total[2],int who);
  20. void dealerGetsCard(int *numCards,int cards[52],int dealerPoints[2]);
  21. void playersGetsCard(int *numCards,int cards[52],int playerPoints[2]);
  22. char getAns(char mesg[]);
  23. void findWinner(int total[2]);

  24. main ()

  25. {
  26.         int numCards;
  27.         int cards[52],playerPoints[2],dealerPoints[2],total[2];
  28.         char ans;
  29.         do
  30.         {
  31.                 initCardsScreen(cards[52],
  32.                         playerPoints[2],
  33.                         dealerPoints[2],
  34.                         total[2],
  35.                         &numCards);
  36.                 dealerGetsCard (&numCards,cards,dealerPoints);
  37.                 printf("\n");
  38.                 playersGetsCard(&numCards,cards,playerPoints);
  39.                 playersGetsCard(&numCards,cards,playerPoints);
  40.                
  41.                 do
  42.                 {
  43.                         ans = getAns("Hit or stand(H/S)?");
  44.                         if (ans == 'H')
  45.                         {
  46.                                         playersGetsCard(&numCards,cards,playerPoints);
  47.                         }
  48.                        
  49.                 }while (ans != 'S');

  50.                 totalIt(playerPoints,total,PLAYER);

  51.                 do
  52.                 {
  53.                         dealerGetsCard (&numCards,cards,dealerPoints);
  54.                 }
  55.                 while (dealerPoints[ACEHIGH]<17);
  56.                 totalIt(dealerPoints,total,DEALER);
  57.                 findwinner(total);
  58.                 ans = getAns("\nPlay again (Y/N) ? ");       
  59.         }
  60.         while (ans == 'Y');
  61.         return ;
  62. }




  63. void initCardsScreen(int cards[52],
  64.                                          int playerPoints[2],
  65.                                          int dealerPoints[2],
  66.                                          int total[2],
  67.                                          int *numCards);
  68. {
  69.         int sub,val = 1;
  70.         char firstName[15];
  71.         *numCards = 52;
  72.         for (sub = 0; sub <= 51; sub++)
  73.         {
  74.                 val = (val == 14) ? 1 : val;
  75.                 cards[sub] = val;
  76.                 val++;
  77.         }
  78.         for (sub = 0; sub <= 1; sub++)
  79.         {
  80.                 playerPoints[sub] = dealerPoints[sub] = total[sub] = 0;
  81.         }
  82.         dispTitle();
  83.         if (askedForName == 0)
  84.         {
  85.                 printf("\nWhat is your first name?");
  86.                 scanf("%s",firstName);
  87.                 askedForName = 1;
  88.                 printf("OK, %s, get ready for casino action!\n\n",firstName);
  89.                 getchar();
  90.         }
  91.         return;
  92. }

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

  94. void playersGetsCard(int *numCards,int cards[52],int playerPoints[2]);
  95. {
  96.         int newCard;
  97.         newCard = dealCard(numCards,cards);
  98.         printf("You draw : ");
  99.         dispCard(newCard,playerPoints);
  100. }

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

  102. void dealerGetsCard(int *numCards,int cards[52],int dealerPoints[2]);
  103. {
  104.         int newCard;
  105.         newCard = dealCard(numCards,cards);
  106.         printf("The dealer draws : ");
  107.         dispCard(newCard,playerPoints);
  108. }

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

  110. int dealCard(int *numCards,int cards[52]);
  111. {
  112.         int cardDrawn,subDraw;
  113.         time_t t;
  114.         srand(time(&t));
  115.         subDraw = ( rand() % (*numCards));
  116.         cardDrawn = cards[subDraw];
  117.         cards[subDraw] = cards[*numCards-1];
  118.         (*numCards)-;
  119.         return cardDrawn;
  120. }

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

  122. void dispCard(int cardDrawn,int points[2]);
  123. {
  124.         switch (cardDrawn)
  125.         {
  126.         case(11):        printf("%s\n,"Jack");
  127.                                 points[ACELOW] += 10;
  128.                                 points[ACEHIGH] += 10;
  129.                                 braeak;
  130.         case(12):        printf("%s\n,"Queen");
  131.                                 points[ACELOW] += 10;
  132.                                 points[ACEHIGH] += 10;
  133.                                 braeak;
  134.         case(13):        printf("%s\n,"King");
  135.                                 points[ACELOW] += 10;
  136.                                 points[ACEHIGH] += 10;
  137.                                 braeak;
  138.         default :         points[ACELOW] += cardDrawn;
  139.                 if (cardDrawn == 1)
  140.                 {
  141.                         printf("%s\n,"ACE");
  142.                         points[ACEHIGH] += 11;
  143.                 }
  144.                 else
  145.                 {
  146.                         points[ACEHIGH] += cardDrawn;
  147.                         printf("%D\n",cardDrawn);
  148.                 }
  149.         }
  150.         return ;
  151. }

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

  153. void totalIt(int points[2],int total[2],int who);
  154. {
  155.         if ((points[ACELOW] == points[ACEHIGH]) || (points[ACEHIGH] > 21))
  156.         {
  157.                 total[who] = points[ACELOW];
  158.         }
  159.         else
  160.         {
  161.                 total[who] = points[ACEHIGH];
  162.         }
  163.         if (who ==PLAYER)
  164.         {
  165.                 printf("You have a total of %d\n\n",total[PLAYER]);
  166.         }
  167.         else
  168.         {
  169.                 printf("The house stands with a total of %d\n\n",total[DEALER]);
  170.         }
  171.         return ;
  172. }


  173. /*打印出赢家*/

  174. void findWinner(int total[2]);
  175. {
  176.         if (total[DEALER] == 21)
  177.         {
  178.                 printf("The house wins.\n");
  179.                 return ;
  180.         }
  181.         if (total[DEALER] > 21) && (total[PLAYER] > 21)
  182.         {
  183.                 printf("%s","Nobody wins.\n");
  184.                 return ;
  185.         }
  186.         if (total[DEALER] >= total[PLAYER]) && (total[DEALER] < 21)
  187.         {
  188.                 printf("The house wins.\n");
  189.                 return ;
  190.         }
  191.         printf("%s%c","You win!\n");
  192.         return ;
  193. }
  194. /*21  */

  195. char getAns(char mesg[]);
  196. {
  197.         char ans;
  198.         printf("%s",mesg);
  199.         ans = getchar();
  200.         getchar();
  201.         return toupper(ans);
  202. }  /*错误指向这一行*/


  203. /*清除屏幕*/

  204. void dispTitle(void)
  205. {
  206.         int i = 0;
  207.         while (i < 25)
  208.         {
  209.                 printf("\n");
  210.                 i++;
  211.         }
  212.         printf("\n\n*Step right up to the Blackjack tables*\n\n");
  213.         return ;
  214. }
复制代码




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


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







Hepburn.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-7 13:19:53 | 显示全部楼层
  1. char getAns(char mesg[]);//……错误指向这一行
  2. {
  3.         char ans;
  4.         printf("%s",mesg);
  5.         ans = getchar();
  6.         getchar();
  7.         return toupper(ans);
  8. }  /*错误指向这一行*/
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-7 13:43:01 | 显示全部楼层
楼上正解,220行明显多了个逗号
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-7 13:57:21 | 显示全部楼层
调试呗,一步步执行一定可以找出错误
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-7 19:00:43 | 显示全部楼层
可是 还是没有解决啊...
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-7 19:30:39 | 显示全部楼层
啊啊啊啊,呼叫版主,我手抖的点了”已经解决”啊~~~~~~~
并没有解决···
咋办
跪求!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

再看看。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

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

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

再次感谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

多谢你的耐心~
再次感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

  10. int askedForName = 0;

  11. void dispTitle(void);

  12. void initCardsScreen(int cards[52],
  13.         int playerPoints[2],
  14.         int dealerPoints[2],
  15.         int total[2],
  16.         int * numCards);
  17. int dealCard(int *numCards, int cards[52]);
  18. void dispCard(int cardDrawn, int points[2]);
  19. void totalIt(int points[2], int total[2], int who);
  20. void dealerGetsCard(int *numCards, int cards[52], int dealerPoints[2]);
  21. void playersGetsCard(int *numCards, int cards[52], int playerPoints[2]);
  22. char getAns(char mesg[]);
  23. void findWinner(int total[2]);

  24. int main(void)

  25. {
  26.         int numCards;
  27.         int cards[52], playerPoints[2], dealerPoints[2], total[2];
  28.         char ans;
  29.         do
  30.         {
  31.                 initCardsScreen(cards,
  32.                         playerPoints,
  33.                         dealerPoints,
  34.                         total,
  35.                         &numCards);
  36.                 dealerGetsCard(&numCards, cards, dealerPoints);
  37.                 printf("\n");
  38.                 playersGetsCard(&numCards, cards, playerPoints);
  39.                 playersGetsCard(&numCards, cards, playerPoints);

  40.                 do
  41.                 {
  42.                         ans = getAns("Hit or stand(H/S)?");
  43.                         if (ans == 'H')
  44.                         {
  45.                                 playersGetsCard(&numCards, cards, playerPoints);
  46.                         }

  47.                 } while (ans != 'S');

  48.                 totalIt(playerPoints, total, PLAYER);

  49.                 do
  50.                 {
  51.                         dealerGetsCard(&numCards, cards, dealerPoints);
  52.                 } while (dealerPoints[ACEHIGH]<17);
  53.                 totalIt(dealerPoints, total, DEALER);
  54.                 findwinner(total);                                //函数findwinner()未定义
  55.                 ans = getAns("\nPlay again (Y/N) ? ");
  56.         } while (ans == 'Y');
  57.         return 0;
  58. }




  59. void initCardsScreen(int cards[52], int playerPoints[2], int dealerPoints[2], int total[2], int *numCards)
  60. {
  61.         int sub, val = 1;
  62.         char firstName[15];
  63.         *numCards = 52;
  64.         for (sub = 0; sub <= 51; sub++)
  65.         {
  66.                 val = (val == 14) ? 1 : val;
  67.                 cards[sub] = val;
  68.                 val++;
  69.         }
  70.         for (sub = 0; sub <= 1; sub++)
  71.         {
  72.                 playerPoints[sub] = dealerPoints[sub] = total[sub] = 0;
  73.         }
  74.         dispTitle();
  75.         if (askedForName == 0)
  76.         {
  77.                 printf("\nWhat is your first name?");
  78.                 scanf("%s", firstName);
  79.                 askedForName = 1;
  80.                 printf("OK, %s, get ready for casino action!\n\n", firstName);
  81.                 getchar();
  82.         }
  83.         return;
  84. }

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

  86. void playersGetsCard(int *numCards, int cards[52], int playerPoints[2])
  87. {
  88.         int newCard;
  89.         newCard = dealCard(numCards, cards);
  90.         printf("You draw : ");
  91.         dispCard(newCard, playerPoints);
  92. }

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

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

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

  102. int dealCard(int *numCards, int cards[52])
  103. {
  104.         int cardDrawn, subDraw;
  105.         time_t t;
  106.         srand((unsigned int)time(&t));
  107.         subDraw = (rand() % (*numCards));
  108.         cardDrawn = cards[subDraw];
  109.         cards[subDraw] = cards[*numCards - 1];
  110.         (*numCards)--;
  111.         return cardDrawn;
  112. }

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

  114. void dispCard(int cardDrawn, int points[2])
  115. {
  116.         switch (cardDrawn)
  117.         {
  118.         case(11) : printf("%s\n","Jack");
  119.                 points[ACELOW] += 10;
  120.                 points[ACEHIGH] += 10;
  121.                 break;
  122.         case(12) : printf("%s\n","Queen");
  123.                 points[ACELOW] += 10;
  124.                 points[ACEHIGH] += 10;
  125.                 break;
  126.         case(13) : printf("%s\n","King");
  127.                 points[ACELOW] += 10;
  128.                 points[ACEHIGH] += 10;
  129.                 break;
  130.         default:         
  131.                 points[ACELOW] += cardDrawn;
  132.                 if (cardDrawn == 1)
  133.                 {
  134.                         printf("%s\n","ACE");
  135.                         points[ACEHIGH] += 11;
  136.                 }
  137.                 else
  138.                 {
  139.                         points[ACEHIGH] += cardDrawn;
  140.                         printf("%D\n", cardDrawn);
  141.                 }
  142.         }
  143.         return;
  144. }

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

  146. void totalIt(int points[2], int total[2], int who)
  147. {
  148.         if ((points[ACELOW] == points[ACEHIGH]) || (points[ACEHIGH] > 21))
  149.         {
  150.                 total[who] = points[ACELOW];
  151.         }
  152.         else
  153.         {
  154.                 total[who] = points[ACEHIGH];
  155.         }
  156.         if (who == PLAYER)
  157.         {
  158.                 printf("You have a total of %d\n\n", total[PLAYER]);
  159.         }
  160.         else
  161.         {
  162.                 printf("The house stands with a total of %d\n\n", total[DEALER]);
  163.         }
  164.         return;
  165. }


  166. /*打印出赢家*/

  167. void findWinner(int total[2])
  168. {
  169.         if (total[DEALER] == 21)
  170.         {
  171.                 printf("The house wins.\n");
  172.                 return;
  173.         }
  174.         if (total[DEALER] > 21 && total[PLAYER] > 21)
  175.         {
  176.                 printf("%s", "Nobody wins.\n");
  177.                 return;
  178.         }
  179.         if (total[DEALER] >= total[PLAYER] && total[DEALER] < 21)
  180.         {
  181.                 printf("The house wins.\n");
  182.                 return;
  183.         }
  184.         printf("%s%c", "You win!\n");
  185.         return;
  186. }
  187. /*21  */

  188. char getAns(char mesg[])
  189. {
  190.         char ans;
  191.         printf("%s", mesg);
  192.         ans = getchar();
  193.         getchar();
  194.         return toupper(ans);
  195. }  /*错误指向这一行*/


  196. /*清除屏幕*/

  197. void dispTitle(void)
  198. {
  199.         int i = 0;
  200.         while (i < 25)
  201.         {
  202.                 printf("\n");
  203.                 i++;
  204.         }
  205.         printf("\n\n*Step right up to the Blackjack tables*\n\n");
  206.         return;
  207. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

那不是一个函数原型的声明吗:
  1. void initCardsScreen(...)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-13 08:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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