Thread: Syntax Error before ; token

  1. #1
    Registered User Bassglider's Avatar
    Join Date
    Nov 2007
    Posts
    32

    Syntax Error before ; token

    While doing an exercise out of this book I run into the syntax error after (*numCards)-;

    which is exactly what the book says, I know that the book can be wrong, what would be suggested to fix this error

    Code:
    /**** This function gets a card from the deck and stores 
    it in either the dealer's or the playe's hold of cards. ****/
    
    int dealCard(int * numCards, int cards[52])
    {
    int cardDrawn, subDraw;
    time_t t;                                       /* Gets time for a random value */
    srand(time(&t));                                /* Seeds random number generator */
    subDraw = (rand() % (*numCards));               /* from 0 to numcards */
    cardDrawn = cards[subDraw];
    cards[subDraw] = cards[*numCards -1];           /* puts top card in place of drawn one */
    (*numCards)-;
    return cardDrawn;
    }

  2. #2
    Registered User
    Join Date
    Dec 2007
    Posts
    16
    I think it should be --

  3. #3
    Registered User Bassglider's Avatar
    Join Date
    Nov 2007
    Posts
    32
    Naw, that doesn't work either

  4. #4
    Registered User
    Join Date
    Dec 2007
    Posts
    16
    can you post the whole program?

    I only get an error on line 4/5- time_t and t aren't declared
    Code:
    int dealCard(int * numCards, int cards[52])
    {
    int cardDrawn, subDraw;
    time_t t;                                       /* Gets time for a random value */
    srand(time(&t));                                /* Seeds random number generator */
    subDraw = (rand() % (*numCards));               /* from 0 to numcards */
    cardDrawn = cards[subDraw];
    cards[subDraw] = cards[*numCards -1];           /* puts top card in place of drawn one */
    (*numCards)--;
    return cardDrawn;
    }

  5. #5
    Registered User Bassglider's Avatar
    Join Date
    Nov 2007
    Posts
    32
    here is the program
    Code:
    /* Filename: BlakJack.c */
    
    #include <stdio.h>
    #include <time.h>
    #include <ctype.h>
    #include <stdlib.h>
    
    /************ Define constants ***********/
    
    #define BELL '\a'
    #define DEALER 0
    #define PLAYER 1
    
    #define ACELOW 0
    #define ACEHIGH 1
    
    int askedForName = 0;
    
    /************ Prototypes *****************/
    
    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 playerPoints[2]);
    char getAns(char mesg[]);
    void findWinner (int total[2]);
    
    /************ Main Function **************/
    
    main() {
    int numCards;									/* Equals 52 at beginning of each game */
    int cards[52], playerPoints[2], dealerPoints[2], total[2];
    char ans;										/* for users Hit/Stand or Yes/No Response */
    do { initCardsScreen(cards, playerPoints, dealerPoints, total, &numCards);
    dealerGetsCard(&numCards, cards, dealerPoints);
    printf("\n");
    playerGetsCard(&numCards, cards, playerPoints);
    playerGetsCard(&numCards, cards, playerPoints);
    do {
    ans = getAns("Hit or stand (H/S)? ");
    if (ans == 'H')
    {	playerGetsCard(&numCards, cards, 
    playerPoints);
    }
    } while (ans != 'S');
    totalIt(playerPoints, total, PLAYER);			/* players Total */
    do {
    dealerGetsCard(&numCards, cards, dealerPoints);
    } while (dealerPoints[ACEHIGH] < 17);			/* Dealer Stops */
    totalIt(dealerPoints, total, DEALER);
    												/* Dealer's total */
    findWinner(total);
    ans = getAns("\nPlay again (Y/N)? ");
    } while (ans == 'Y');
    return 0;
    }
    
    /* This function initializes the face values of the deck of cards by putting 
    four sets of 1-13 in the 52-card array.  Also clears the screen and displays
    a title */
    
    void initCardsScreen(int cards[52], int playerPoints[2], int dealerPoints[2], int total[2], int *numCards) {
    int sub, val = 1;							/* This function's Work Variables */
    char firstName[15];							/* Hold's user's First name */
    *numCards = 52;								/* Holds running total of number of cards */
    for (sub = 0; sub <= 1; sub++) {			/* Counts from 0 to 51 */
    val = (val == 14) ? 1 : val;				/* If val is 14, reset to 1 */
    cards[sub] = val;
    val++; }
    for (sub = 0; sub <= 1; sub++) /* Counts from 0 to 1 */
    { playerPoints [sub]= dealerPoints[sub]=total[sub]=0; }
    dispTitle();
    if (askedForName == 0)						/* Name asked for only once */
    { printf("\nWhat is your first name? ");
    scanf(" &#37;s", firstName);
    askedForName = 1;							/* Don't ask prompt again */
    printf("Ok, %s, get ready for Blackjack Action!\n\n", firstName);
    getchar();									/* Discards newline. You can safely ignore compiler warning here. */
    return;
    }
    
    /************* This function gets a card for the player and updates the player's points ***/
    
    void playerGetsCard(int *numCards, int cards[52], int playerPoints[2])
    {
    int newCard;
    newCard = dealCard(numCards, cards);
    printf("You Draw: ");
    dispCard(newCard, playerPoints);
    }
    
    /************* This function gets a card for thet dealer and updates the dealer's points. */
    
    void dealerGetsCard(int *numCards, int cards[52], int dealerPoints[2])
    {
    int newCard;
    newCard = dealCard(numCards, cards);
    printf("The Dealer Draws: ");
    dispCard(newCard, dealerPoints);
    }
    
    /************ This function gets a card from the deck and stores it in either the dealer's or the playe's hold of cards. */
    int dealCard(int * numCards, int cards[52])
    {
    int cardDrawn, subDraw;
    time_t t;								/* Gets time for a random value */
    srand(time(&t));						/* Seeds random number generator */
    subDraw = (rand() % (*numCards));		/* from 0 to numcards */
    cardDrawn = cards[subDraw];
    cards[subDraw] = cards[*numCards -1];	/* puts top card in place of drawn one */
    (*numCards)-;
    return cardDrawn;
    }
    
    /*********** Displays the last-drawn card and updates points with it */
    
    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;
    }
    
    /****** Figures the total for player or dealer to see who won. This function
    
    takes into account the fact that Ace is either 1 or 11. */
    
    void totalIt(int points[2], int total[2], int who)
    {
    
    
    /* the follow routine fist looks to see if the total points counting aces as 1 is equal
    to the total points counting aces as 11. If so, or if the total points counting aces as 11 is more the 21, the program
    uses the total with aces as 1 only. */
    
    
    if ((points[ACELOW] == points[ACEHIGH]) || (points[ACEHIGH] > 21))
    { total[who] = points[ACELOW]; }				/* Keeps all Aces as 1 */
    else 
    { total[who] = points[ACEHIGH]; }				/* Keeps all Aces as 11 */
    if (who == player)								/* Determines the message printed */
    { 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;
    }
    
    /********** Prints the winning player. ******/
    
    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; }
      
    if ((total[PLAYER] > 21) && (total[DEALER] < 21))
    { printf("The House Wins.\n");
      return; }
    
    printf("%s%c", "You Win!\n", BELL);
      return;
    }
    
    
    /****** Gets the user's uppercase, single-character response  ***/
    
    char getAns(char mesg[])
    {
    char ans;
    printf("%s", mesg);							/* Prints the prompt message passed */
    ans = getchar();
    getchar();									/* discard newline, ignore compiler warning here */
    return toupper(ans);
    }
    
    /* Clears everything on screen */
    void dispTitle(void)
    {
    int i = -;
    while (i <25)								/* clears screen by printing 25 blank */
    { printf("\n");
    i++; }
    printf("\n\n*Step Right up to the Blackjack Table*\n\n");
    return;
    }

  6. #6
    Registered User
    Join Date
    Nov 2007
    Location
    Bangalore, India
    Posts
    24
    Code:
    if (askedForName == 0)						/* Name asked for only once */
    { printf("\nWhat is your first name? ");
    Missing closing brace for this if in function initCardsScreen.

    Code:
    points[ACEHIGH += 10;
    .
    Missing closing square bracket in function dispCard.

    Code:
    /* Clears everything on screen */
    void dispTitle(void)
    {
    int i = -;
    while (i <25)								/* clears screen by printing 25 blank */
    { printf("\n");
    i++; }
    printf("\n\n*Step Right up to the Blackjack Table*\n\n");
    return;
    }
    Read some text book on C.
    Last edited by pankaj401; 12-10-2007 at 02:56 AM.

  7. #7
    Registered User Bassglider's Avatar
    Join Date
    Nov 2007
    Posts
    32
    Thank you pankaj

  8. #8
    Registered User
    Join Date
    Aug 2006
    Posts
    100
    And only seed your random number generator ONCE, not every time you deal a card.

  9. #9
    Registered User Bassglider's Avatar
    Join Date
    Nov 2007
    Posts
    32
    I am still wondering about this error:

    (*numCards)-; // Says ERROR: syntax error before ';' token

    I also get the same error for int i = -;

    Code:
    /* Clears everything on screen */
    void dispTitle(void)
    {
    int i = -;
    while (i <25)								/* clears screen by printing 25 blank */
    { printf("\n");
    i++; }

  10. #10
    Kernel hacker
    Join Date
    Jul 2007
    Location
    Farncombe, Surrey, England
    Posts
    15,677
    Quote Originally Posted by Bassglider View Post
    I am still wondering about this error:

    (*numCards)-; // Says ERROR: syntax error before ';' token

    I also get the same error for int i = -;

    Code:
    /* Clears everything on screen */
    void dispTitle(void)
    {
    int i = -;
    while (i <25)								/* clears screen by printing 25 blank */
    { printf("\n");
    i++; }
    And what are those two statements supposed to do/mean? In the second case, I would use int i = 0; or, I prefer:
    Code:
    ...
    int i;
    for(i = 0; i < 25; i++) putchar("\n");
    It does the same thing, but a bit simpler.

    Your first statement, I don't even understand what you mean by it. Did you intend to have a double minus to decrement the value, or something else?

    --
    Mats
    Compilers can produce warnings - make the compiler programmers happy: Use them!
    Please don't PM me for help - and no, I don't do help over instant messengers.

  11. #11
    Registered User Bassglider's Avatar
    Join Date
    Nov 2007
    Posts
    32
    Ok, yes that must be a typo in the book. The second one is fixed. that logic I understand.

    What I dont understand is what the first is attempting to do in this function:

    Code:
    //	This function gets a card from the deck and stores it in either
    //	the dealer's or the playe's hold of cards.
    
    int dealCard(int * numCards, int cards[52])
    {
    	int cardDrawn, subDraw;
    	time_t t;								/* Gets time for a random value */
    	srand(time(&t));						/* Seeds random number generator */
    	subDraw = (rand() &#37; (*numCards));		/* from 0 to numcards */
    	cardDrawn = cards[subDraw];
    	cards[subDraw] = cards[*numCards -1];	/* puts top card in place of drawn one */
    	(*numCards)-;
    	return cardDrawn;
    }
    on this line : (*numCards)-;

    I don't understand what the - is attempting to achieve

  12. #12
    Kernel hacker
    Join Date
    Jul 2007
    Location
    Farncombe, Surrey, England
    Posts
    15,677
    I would suppose that it actually deducts one from the "number of cards", which would be done by the decrement operator, double minus "--".

    --
    Mats
    Compilers can produce warnings - make the compiler programmers happy: Use them!
    Please don't PM me for help - and no, I don't do help over instant messengers.

  13. #13
    Registered User Bassglider's Avatar
    Join Date
    Nov 2007
    Posts
    32
    Gotcha, that fixed it Thanks Matsp now I understand

  14. #14
    Registered User Bassglider's Avatar
    Join Date
    Nov 2007
    Posts
    32
    ok here is the program again, now producing no errors but getting weird results (instead of card numbers I am getting other results when running it,)
    It's a blackjack game

    Code:
    /* Filename: BlakJack.c */
    
    #include <stdio.h>
    #include <time.h>
    #include <ctype.h>
    #include <stdlib.h>
    
    /************ Define constants ***********/
    
    #define BELL '\a'
    #define DEALER 0
    #define PLAYER 1
    
    #define ACELOW 0
    #define ACEHIGH 1
    
    int askedForName = 0;
    
    /************ Prototypes *****************/
    
    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 playerPoints[2]);
    char getAns(char mesg[]);
    void findWinner (int total[2]);
    
    /************ Main Function **************/
    
    int main() 
    {
    	int numCards;												/* Equals 52 at beginning of each game */
    	int cards[52], playerPoints[2], dealerPoints[2], total[2];
    	char ans;													/* for users Hit/Stand or Yes/No Response */
    	do 
    	{ 
    		initCardsScreen(cards, playerPoints, dealerPoints, total, &numCards);
    		dealerGetsCard(&numCards, cards, dealerPoints);
    		printf("\n");
    		playerGetsCard(&numCards, cards, playerPoints);
    		playerGetsCard(&numCards, cards, playerPoints);
    		do 
    		{
    			ans = getAns("Hit or stand (H/S)? ");
    			if (ans == 'H')
    				{	
    				playerGetsCard(&numCards, cards, 
    				playerPoints);
    				}
    		} 
    		while (ans != 'S');
    		totalIt(playerPoints, total, PLAYER);						/* players Total */
    		do 
    		{
    			dealerGetsCard(&numCards, cards, dealerPoints);
    		} 
    		while (dealerPoints[ACEHIGH] < 17);						/* Dealer Stops */
    		totalIt(dealerPoints, total, DEALER);
    																/* Dealer's total */
    		findWinner(total);
    		ans = getAns("\nPlay again (Y/N)? ");
    	} 
    	while (ans == 'Y');
    	return 0;
    }
    
    /* This function initializes the face values of the deck of cards by putting 
    four sets of 1-13 in the 52-card array.  Also clears the screen and displays
    a title */
    
    void initCardsScreen(int cards[52], int playerPoints[2], int dealerPoints[2], int total[2], int *numCards) 
    {
    	int sub, val = 1;									/* This function's Work Variables */
    	char firstName[15];									/* Hold's user's First name */
    	*numCards = 52;										/* Holds running total of number of cards */
    	for (sub = 0; sub <= 1; sub++)						/* Counts from 0 to 51 */
    	{					
    		val = (val == 14) ? 1 : val;					/* If val is 14, reset to 1 */
    		cards[sub] = val;
    		val++; 
    	}
    	for (sub = 0; sub <= 1; sub++)						/* Counts from 0 to 1 */
    	{ 
    		playerPoints [sub]= dealerPoints[sub]=total[sub]=0; 
    	}
    	dispTitle();
    	if (askedForName == 0)							/* Name asked for only once */
    	{ 
    		printf("\nWhat is your first name? ");
    		scanf(" &#37;s", firstName);
    		askedForName = 1;							/* Don't ask prompt again */
    		printf("Ok, %s, get ready for Blackjack Action!\n\n", firstName);
    		getchar();
    	}											/* Discards newline. You can safely ignore compiler warning here. */
    	return;	
    }
    
    //	This function gets a card for the player and updates the player's points
    
    void playerGetsCard(int *numCards, int cards[52], int playerPoints[2])
    {
    	int newCard;
    	newCard = dealCard(numCards, cards);
    	printf("You Draw: ");
    	dispCard(newCard, playerPoints);
    }
    
    //	This function gets a card for thet dealer and updates the dealer's points.
    
    void dealerGetsCard(int *numCards, int cards[52], int dealerPoints[2])
    {
    	int newCard;
    	newCard = dealCard(numCards, cards);
    	printf("The Dealer Draws: ");
    	dispCard(newCard, dealerPoints);
    }
    
    //	This function gets a card from the deck and stores it in either
    //	the dealer's or the playe's hold of cards.
    
    int dealCard(int * numCards, int cards[52])
    {
    	int cardDrawn, subDraw;
    	time_t t;								/* Gets time for a random value */
    	srand(time(&t));						/* Seeds random number generator */
    	subDraw = (rand() % (*numCards));		/* from 0 to numcards */
    	cardDrawn = cards[subDraw];
    	cards[subDraw] = cards[*numCards -1];	/* puts top card in place of drawn one */
    	(*numCards)--;
    	return cardDrawn;
    }
    
    //	Displays the last-drawn card and updates points with it
    
    void dispCard(int cardDrawn, int points[2])
    {
    	switch (cardDrawn) 
    	{
    		case(11) : printf("%s\n", "Jack");
    		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);      // %i ? ******
    			}
    	}
    	return;
    }
    
    /****** Figures the total for player or dealer to see who won. This function
    
    takes into account the fact that Ace is either 1 or 11. */
    
    
    /* the follow routine fist looks to see if the total points counting aces as 1 is equal
    to the total points counting aces as 11. If so, or if the total points counting aces as 11 is more the 21, the program
    uses the total with aces as 1 only. */
    
    void totalIt(int points[2], int total[2], int who)
    {
    	if ((points[ACELOW] == points[ACEHIGH]) || (points[ACEHIGH] > 21))
    	{ total[who] = points[ACELOW]; }				/* Keeps all Aces as 1 */
    	else 
    	{ total[who] = points[ACEHIGH]; }				/* Keeps all Aces as 11 */
    	if (who == PLAYER)								/* Determines the message printed */
    	{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;
    }
    
    /********** Prints the winning player. ******/
    
    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; }
      
    	if ((total[PLAYER] > 21) && (total[DEALER] < 21))
    	{ printf("The House Wins.\n");
    	return; }
    
    	printf("%s%c", "You Win!\n", BELL);
    	return;
    }
    
    
    /****** Gets the user's uppercase, single-character response  ***/
    
    char getAns(char mesg[])
    {
    	char ans;
    	printf("%s", mesg);							/* Prints the prompt message passed */
    	ans = getchar();
    	getchar();									/* discard newline, ignore compiler warning here */
    	return toupper(ans);
    }
    
    /* Clears everything on screen */
    void dispTitle(void)
    {
    	int i = 0;
    	while (i <25)								/* clears screen by printing 25 blank */
    	{ printf("\n"); i++; }
    	printf("\n\n*Step Right up to Blackjack Table*\n\n");
    	return;
    }

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. more then 100errors in header
    By hallo007 in forum Windows Programming
    Replies: 20
    Last Post: 05-13-2007, 08:26 AM
  2. We Got _DEBUG Errors
    By Tonto in forum Windows Programming
    Replies: 5
    Last Post: 12-22-2006, 05:45 PM
  3. Using VC Toolkit 2003
    By Noobwaker in forum Windows Programming
    Replies: 8
    Last Post: 03-13-2006, 07:33 AM
  4. Connecting to a mysql server and querying problem
    By Diod in forum C++ Programming
    Replies: 8
    Last Post: 02-13-2006, 10:33 AM
  5. Dikumud
    By maxorator in forum C++ Programming
    Replies: 1
    Last Post: 10-01-2005, 06:39 AM