gpt4 book ai didi

c - '=' token 之前出现错误 : expected ',' , ';' 、 'asm' 、 '__attribute__' 或 '{' |

转载 作者:行者123 更新时间:2023-11-30 14:54:40 24 4
gpt4 key购买 nike

此链接中的代码有问题 -
Why does it say 'expected declaration specifiers before 'main''

但那里的答案并不令人满意。还有很多问题根本没有得到解决。

这是一些编译器输出

|20|error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token  
|14|error: old-style parameter declarations in prototyped function definition
|113|error: expected identifier or '(' before '{' token
|139|error: expected '(' before '{' token
|169|error: expected ':' or '...' before ';' token
|276|error: redefinition of 'getFinalHand'
|14|note: previous definition of 'getFinalHand' was here|

我真的不知道如何处理这些。

#include <stdio.h>
#include <time.h>
#include <ctype.h>
#include <stdlib.h>

#define FALSE 0
#define TRUE 1

void printGreeting();
int getBet();
char getSuit(int suit);
char getRank(int rank);
void getFirstHand(int cardRank[], int cardSuit[]);
void getFinalHand
(int cardRank[], int cardSuit[], int finalRank[], int finalSuit[], int
ranksinHand[], int suitsinHand[])
int analyzeHand(int ranksinHand[], int suitsinHand[]);


main()
{
int bet;
int bank = 100;
int i;
int cardRank [5];
int cardSuit [5];
int finalRank[5];
int finalSuit[5];
int ranksinhand[13];
int suitsinhand[4];
int winnings;
time_t t;
char suit, rank, stillPlay;


printGreeting();


do{
bet = getBet();
srand(time(&t));
getFirstHand(cardRank, cardSuit);
printf("Your five cards: \n\n");
for (i = 0; i < 5; i++)
{
suit = getSuit(cardsSuit[i]);
rank = getRank(cardRank[i]);
printf("Card #%d: %c%c\n\n", i+1, rank, suit);
}

for (i=0; i < 4; i++)
{
suitsinHand[i] = 0;
}
for (i=0; i < 13; i++)
{
ranksinHand[i] = 0;
}

getFinalHand(cardRank, cardSuit, finalRank, finalSuit, ranksinHand,
suitsinHand);

printf("Your five final cards:\n\n");
for (i = 0; i < 5; i++)
{
suit = getSuit(finalSuit[i]);
rank = getRank(finalRank[i]);
printf("Card #%d: %c%c\n\n", i+1, rank, suit);
}

winnings = analyzeHand(ranksinHand, suitsinHand);
printf("You won %d!\n\n", bet*winnings);
bank = bank - bet + (bet*winnings)
printf("\n\nYour bank is now %d.\n\n", bank);
printf("Want to play again? ");
scanf(" %c", &stillPlay);
}while (toupper(stillPlay) == 'Y');



return;
}

/*************************************************************************/


void printGreeting();
{

printf("**********************************************************\n\n");
printf("\n\n\tWelcome to the Absolute Beginner's Casino\n\n");
printf("\tHome of the Video Draw Poker");
printf("**********************************************************\n\n");

printf("Here are the rules\n");
printf("You start with 100 credits, and you make a bet from");
printf("1 to 5 credits.\n");
printf("You are dealt 5 cards, and then you choose which ");
printf("cards to keep");
printf("or discard\n");
printf("You want to make the best possible hand.\n");
printf("\nHere is the table for winnings (assuming a ");
printf("bet of 1 credit):");
printf("\nPair \t\t\t\t1 credit");
printf("\nTwo pairs\t\t\t2 credits");
printf("\nThree of a kind\t\t\t3 credits");
printf("\nStraight \t\t\t4 credits");
printf("Flush\t\t\t\t5 credits");
printf("Full House\t\t\t8 credits");
printf("Four of a Kind\t\t\t10 credits");
printf("Straight Flush\t\t\t20 credits");
printf("\n\nHave fun!!\n\n");
}


void getFirstHand(int cardRank[], int cardSuit[]);
{
int i,j;
int carDup;

for(i=0; i < 5; i++)
{
carDup = 0;
do{
cardRank[i] = (rand() % 13);
cardSuit[i] = (rand() % 4);

for (j=0; j < i; j++)
{
if ((cardRank[i] == cardRank[j] &&
cardSuit[i] == cardSuit[j]))
{
carDup = 1;
}
}
}while (carDup == 1;);
}
}

char getSuit(int suit)
{
switch
{
case 0:
return('C');
case 1:
return('D');
case 2:
return('H');
case 3:
return('S');
}
}

char getRank(int rank)
{
switch (rank)
{
case 0:
return('A');
case 1:
return('2');
case 2:
return('3');
case 3:
return('4');
case 4:
return('5');
case 5:
return('6');
case 6:
return('7');
case 7;
return('8');
case 8:
return('9');
case 9:
return('T');
case 10:
return('J');
case 11:
return('Q');
case 12:
return('K');
}
}
int getBet()
{
int bet;
do
{
printf("How much do you want to bet?(Enter a number");
printf("from 1 to 5, or 0 to quit the game): ");
scanf(" %d", &bet);

if (bet >= 1 && bet <= 5)
{
return(bet);
}
else if (bet == 0)
{
exit(1);
}
else
{
printf("\n\nPlease enter a bet from 1-5 or ");
printf("0 to quit the game\n\n");
}
}while ((bet < 0) || (bet > 5));
}

int analyzeHand(int ranksinHand[], int suitsinHand[])
{
int num_consec = 0;
int i, rank, suit;
int straight = FALSE;
int flush = FALSE;
int four = FALSE;
int three = FALSE;
int pairs = 0;


for (suit = 0; suit < 4; suit++)
if (suitsinHand[suit] == 5)
flush = TRUE;
rank = 0;
while (ranksinHand[rank] == 0)
rank++;
for (; rank < 13 && ranksinHand[rank]; rank++)
num_consec++;
if(num_consec == 5) {
straight = TRUE;
}
for (rank = 0; rank < 13; rank++){
if (ranksinHand[rank] == 4)
four == TRUE;
if (ranksinHand[rank] == 3)
three == TRUE;
if (ranksinHand[rank] == 2)
pairs++;
}
if (straight && flush){
printf("Straight Flush\n\n");
return(20);
}
else if (four){
printf("Four of a kind\n\n");
return (10);
}
else if (three && pairs == 1){
printf("Full House\n\n");
return (8);
}
else if (flush){
printf("Flush\n\n");
return (5);
}
else if (straight){
printf("Straight\n\n");
return (4);
}
else if (three){
printf("Three of a Kind\n\n");
return (3);
}
else if (pairs == 2){
printf("Two Pairs\n\n");
return (2);
}
else if (pairs == 1){
printf("Pair\n\n");
return (1);
}
else{
printf("High Card\n\n");
return (0);
}
}

void getFinalHand
(int cardRank[], int cardSuit[], int finalRank[], int finalSuit[], int
ranksinHand[], int suitsinHand[])
{
int i, j, carDup;
char suit, rank, ans;

for (i=0; i < 5; i++)
{
suit = getSuit(cardSuit[i]);
rank = getRank(cardRank[i]);
printf("Do you want to keep card #%d: %c%c", i+1, rank, suit);
printf("\nPlease answer (Y/N):");
scanf(" %c", &ans);
if (toupper(ans) == 'Y')
{
finalRank[i] = cardRank[i];
finalSuit[i] = cardSuit[i];
ranksinHand[finalRank[i]]++;
suitsinHand[finalSuit[i]]++;
continue;
}
else if (toupper(ans) == 'N')
{
carDup = 0;
do{
carDup = 0;
finalRank[i] = (rand() % 13);
finalSuit[i] = (rand() % 4);

for (j=0; j < 5; j++)
{
if((finalRank[i] == finalRank[j]) && (finalSuit[i] ==
finalSuit[j]))
{
carDup = 1;
}
}

for (j=0; j < i; j++)
{
if((finalRank[i] == finalRank[j]) && (finalSuit[i] ==
finalSuit[j]))
{
carDup = 1;
}
}
}while (carDup == 1);
ranksinHand[finalRank[i]]++;
suitsinHand[finalSuit[i]]++;
}

}
}

最佳答案

请将您的程序与 HelloWorld 或教程中的内容进行比较。 main() 的通常头部(在最简单的情况下)应该是 int main(void)

附注:
您需要向任何不返回 void 的内容添加 return 语句,例如第 153、188、213 行,并注意第 81 行返回的内容。
您需要注意标识符的大小写敏感性,例如第 29、30 行。
您需要在第 142 行决定要切换的内容。
您需要查看第 240,242 行中 === 之间的区别。
您似乎正在与第 14、16、73、116、138、173 行中的分号 ; 进行一场 war ,请讲和。

我并不是说在修复这些问题后程序将按预期工作,我不在乎试图弄清楚这一点。但如果你从某个地方复制,它可能会。然而,以这种方式复制代码不太可能教会您任何东西。

简而言之,您需要学习制作小型工作程序,并以经过验证的小步骤慢慢扩展它们。
我无法想象你是如何在没有中间步骤的情况下编写出这样超过 300 行的代码的。我唯一能想象的是你从某个地方复制了这段代码,手动输入。这似乎与那里的错误类型一致。
通过慢慢向上学习一些教程,了解编译器警告的含义(至少使用 gcc -Wall)。手动复制教程代码时,您可能会犯一些此类错误,并且可以更轻松地修复它们,一个接一个。
我建议通过改变一些小事情来使用教程代码(在正确之后,做它应该做的事情)。例如。更改“Hello world”的输出。更改为“Hi Praveen.”,更改 for (...;...;...) 中的循环数量以及类似的内容。通过这种方式进行一些练习,学习预测哪些代码编辑会导致哪些行为发生变化。

关于StackOverflow,你应该研究一下这个概念
https://stackoverflow.com/help/mcve
这是一种很棒的调试技术,对您自己非常有帮助。
而且在 StackOverflow 上提问也很有帮助。这个问题中的示例距离重现 main() 头 问题的“最小”示例还很远。

关于c - '=' token 之前出现错误 : expected ',' , ';' 、 'asm' 、 '__attribute__' 或 '{' |,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46577184/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com