2017-10-05 21 views
0

は、このリンクでこのコードに問題がありました -
Why does it say 'expected declaration specifiers before 'main''エラー: '='、 '、'、 ';'、 'asm'または '__attribute__'の前に '{' token |

しかし、答えは満足のいく存在しませんでした。そして、まったく取り組まれていない多くの問題があります。ここで

は、私は本当にこれらに対処する方法がわからない、コンパイラの出力

|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]]++; 
} 

} 
} 
+0

もう1つの有用な手法はインデントです。 – Yunnosch

+0

'main'の適切な宣言は' int main(void) 'と' int main(int argc、char ** argv) 'です(これは' char * argv [] 'と書かれています)。**注意:** 'main'は' int型 'の関数であり、値を返します。参照:[** C11標準§5.1.2.2.1プログラム起動(draft n1570)**](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf)。参照:[** CおよびC++でmain()が返すべきものを参照してください**](http://stackoverflow.com/questions/204476/) –

答えて

1

あなたのプログラムをHelloWorldまたはチュートリアルのものと比較してください。 main()(最も単純な場合)の通常の頭部はint main(void)であるべきです。

補足として:
voidを返さないものにreturn文を追加する必要があります。行153,188,213を参照し、81行目に戻る内容に注意してください。
識別子の大文字と小文字の区別に注意する必要があります。行29,30
行142に切り替えたいものを決定する必要があります。
行240,242の===の違いを見る必要があります。
14,16,73,116,138,173のセミコロン;と戦っているようですが、平和をお祈りください。

プログラムを修正した後にプログラムが正常に動作するとは言わないので、私はそれを理解しようとしなかった。しかし、あなたがどこかからコピーしたら、それはおそらくそうです。しかし、この方法でコードをコピーすることは、あなたに何かを教えることはまずありません。

要するに、小さな作業プログラムを作成し、小さく、確認された手順でそれらをゆっくりと拡張することを学ぶ必要があります。
中間の手順を取らずに、300行以上のようなコードをどのように記述したのか想像できません。私が想像できる唯一のことは、どこからでもこのコードをコピーして手動で入力することです。それはそこの間違いの種類と一貫しているようです。
ゆっくりといくつかのチュートリアルを順を追って実行することによって、コンパイラの警告の意味を知ることができます(少なくともgcc -Wallを使用)。チュートリアルコードを手動でコピーするときは、この種のいくつかの間違いを犯して、簡単に人生を修正していくことができます。
私はチュートリアルのコード(ちょっとしたことを変えることで、正しいものを得た後、それをやり遂げるために)をプレイすることをお勧めします。例えば。 「Hello world」の出力を変更します。 "Hi Praveen。"に、for (...;...;...)などのループ数を変更します。そのようにしていくつかの練習をし、どの編集がコード化されて行動に変化するかを予測することを学びます。

についてはStackOverflowの、あなたは
https://stackoverflow.com/help/mcve
の概念を検討すべきであるそれは偉大なデバッグ技術である、あなた自身のために非常に便利です。
また、StackOverflowで質問すると非常に役に立ちます。この問題のexmpleは、頭部の問題を再現するための「最小」からの距離が非常に遠いです。main()

関連する問題