c - problem with headers?


 
Thread Tools Search this Thread
Top Forums Programming c - problem with headers?
# 1  
Old 07-03-2010
c - problem with headers?

I have a simple program to create a poker deck, shuffle it and deal cards. Here it is:

Code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

struct Card {
    char *face,
         *suit;
    };

void fillDeck (Card *deck, char *face[], char *suit[]);
void shuffle (Card *deck);
void deal (Card *deck);

int main ()
{
  struct Card deck [52];

  char *face [13] = {"Ace", "Deuce", "Tree", "Four", "Five",
                     "Six", "Seven", "Eight", "Nine", "Ten",
                     "Jack", "Queen", "King"},
       *suit [4] = {"Hearts", "Spades", "Diamonds", "Clubs"};

  srand (time (0));
  fillDeck (deck, face, suit);
  shuffle (deck);
  deal (deck);
  return 0;
}

void fillDeck (Card *deck, char *face[], char *suit[])
{
  for ( int i = 0; i < 52; i++ )
  {
    deck[i].face = face [i % 13];
    deck[i].suit = suit [i / 13];
  }
}

void shuffle (Card *deck)
{
  for ( int i = 0; i < 52; i++ )
  {
    int j = rand () % 52;
    struct Card temp = deck [i];
    deck [i] = deck [j];
    deck [j] = temp;
  }
}

void deal (Card *deck)
{
  for ( int i = 0; i < 52; i++ )
    printf ("%s of %s\n", deck[i].face, deck[i].suit);
}

But gcc compiler reports these errors:

Code:
luke@luke-desktop:~/Desktop/Lab$ cc pokerDeck.c
pokerDeck.c:10: error: expected ‘)’ before ‘*’ token
pokerDeck.c:11: error: expected ‘)’ before ‘*’ token
pokerDeck.c:12: error: expected ‘)’ before ‘*’ token
pokerDeck.c:30: error: expected ‘)’ before ‘*’ token
pokerDeck.c:39: error: expected ‘)’ before ‘*’ token
pokerDeck.c:50: error: expected ‘)’ before ‘*’ token

mcpp reports several times something like this:

Code:
/usr/include/alloca.h:25: error: Can't open include file "stddef.h"
    #include <stddef.h>
    from /usr/include/stdlib.h: 497:    # include <alloca.h>
    from /home/luke/Desktop/Lab/pokerDeck.c: 2:    #include <stdlib.h>

In C++, I had a similar problem: compiler didn't manage to open iostream and I solved changing .cc extension with .cpp extension.

But what about here?

Last edited by Luke Bonham; 07-03-2010 at 10:53 AM..
# 2  
Old 07-03-2010
Unlike in C++, a struct in C is not a type automatically. You need
Code:
typedef struct Card Card;

Or compile your code with g++.
# 3  
Old 07-03-2010
I disagree about c++. You either code for C or for c++. You don't bounce back and forth C->C++, C++->C....

Pick one.

We'll help. Either way you have syntax errors as your code stands.

Also, learning C and C++ concurrently is not a great idea. If you have to know both for your job, pick the one that is used the most, learn it well. Then try the other.
# 4  
Old 07-03-2010
And you will probably need to add the -std=c99 to the gcc compile line because loop initial declarations (another C++ -ism) are only allowed in C99 mode.

---------- Post updated at 10:33 AM ---------- Previous update was at 10:26 AM ----------

Quote:
I disagree about c++. You either code for C or for c++. You don't bounce back and forth C->C++, C++->C.
Hear, hear! I could not agree more.

Here is the example written in classical C
Code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

struct card {
    char *face;
    char *suit;
};

void fillDeck (struct card *, char *[], char *[]);
void shuffle (struct card *);
void deal (struct card *);

int main ()
{
  struct card deck[52];

  char *face [13] = {"Ace", "Deuce", "Tree", "Four", "Five",
                     "Six", "Seven", "Eight", "Nine", "Ten",
                     "Jack", "Queen", "King"};
  char  *suit [4] = {"Hearts", "Spades", "Diamonds", "Clubs"};

  srand (time (0));

  fillDeck (deck, face, suit);
  shuffle (deck);
  deal (deck);
  return 0;
}

void fillDeck (struct card *deck, char *face[], char *suit[])
{
  int i;

  for ( i = 0; i < 52; i++ )
  {
    deck[i].face = face [i % 13];
    deck[i].suit = suit [i / 13];
  }
}
void shuffle (struct card *deck)
{
  int i;

  for ( i = 0; i < 52; i++ )
  {
    int j = rand () % 52;
    struct card temp = deck [i];
    deck [i] = deck [j];
    deck [j] = temp;
  }
}

void deal (struct card *deck)
{
  int i;

  for ( i = 0; i < 52; i++ )
    printf ("%s of %s\n", deck[i].face, deck[i].suit);
}

# 5  
Old 07-04-2010
Yeah, those forgot "struct" in functions signatures. A very beginner's error.

Quote:
Also, learning C and C++ concurrently is not a great idea. If you have to know both for your job, pick the one that is used the most, learn it well. Then try the other.
Right.

Thank you all.

Edit:

Since my real problem is that I need real code instead of examples to get a real improve, could you suggest me where I can find some c and c++ free code to study? Thanks.

Last edited by Luke Bonham; 07-04-2010 at 09:36 AM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Email Headers

I'm trying to pick up some Unix SysAdmin skills on my own outside of work through the use of the "Unix and Linux System Administrators Handbook." I've found the exercises to be very beneficial, until I came to this.... "What path did the email take? To Whom was it addressed, and to whom was it... (0 Replies)
Discussion started by: ksmarine1980
0 Replies

2. UNIX for Dummies Questions & Answers

Modifying headers

I have a FASTA file with thousands of sequences that looks something like this: I need to modfy the header in such way that everything after the dot is remove. Thus, I will end up with something like this: Thanks (1 Reply)
Discussion started by: Xterra
1 Replies

3. Shell Programming and Scripting

editing headers

Hi, I have a folder that contains many (multiple) files 1.fasta 2.fasta 3.fasta 4.fasta 5.fasta . . 100's of files Each such file have data in the following format for example: vi 1.fasta 58 390 A GTATACATTATTGATGAAGTCCACATGCTTTCTATGGGTGCCTTCAATGCGCTTTTAAAA (7 Replies)
Discussion started by: Lucky Ali
7 Replies

4. Shell Programming and Scripting

Editing headers

Hi, I have a folder that contains many (multiple) files 1.fasta 2.fasta 3.fasta 4.fasta 5.fasta . . 100's of files Each such file have data in the following format for example: vi 1.fasta >AB_1 200bp MLKKPIIIGVTGGSGGGKTSVSRAILDSFPNARIAMIQHDSYYKDQSHMSFEERVKTNYDHPLAFDTDFM... (4 Replies)
Discussion started by: Lucky Ali
4 Replies

5. IP Networking

Modifying IPv4 headers

Hi, My query is: I need to set the IPv4 header fields(like TOS, TTL, Precedence and Flags) in the linux kernel using the system calls. I tried setting the fields using the setsockopt() call using sockets but it is not reflecting the actual IPv4 header fields. Is it possible to modify these... (0 Replies)
Discussion started by: kiran_4u
0 Replies

6. UNIX for Dummies Questions & Answers

Grep Headers

Hi! Trying to find string and then put the above Headers of corresponding fist line. After executing a Property command a get this output: SP/CH-CH Span Name Type TG Idle InUse OffHk OnHk Ring -------- ------------------------------ ------ ---- ----- ----- ----- 02/01-24 CARRIERSS7... (6 Replies)
Discussion started by: Joel_john
6 Replies

7. Shell Programming and Scripting

Merging of files with different headers to make combined headers file

Hi , I have a typical situation. I have 4 files and with different headers (number of headers is varible ). I need to make such a merged file which will have headers combined from all files (comman coluns should appear once only). For example - File 1 H1|H2|H3|H4 11|12|13|14 21|22|23|23... (1 Reply)
Discussion started by: marut_ashu
1 Replies

8. Shell Programming and Scripting

Remove text between headers while leaving headers intact

Hi, I'm trying to strip all lines between two headers in a file: ### BEGIN ### Text to remove, contains all kinds of characters ... Antispyware-Downloadserver.com (Germany)=http://www.antispyware-downloadserver.c om/updates/ Antispyware-Downloadserver.com #2... (3 Replies)
Discussion started by: Trones
3 Replies

9. Programming

headers of the query

when we are spooling query o/p to certain txt file,in that file how we can get headers in the query.(through unix shell scripting). for exmple q1="slect * from XXXXXX;"; sqlplus XXX/XXXX@XXXXX spool XXXX.txt $q1 spool off in the text file i want the headers of the query..... ... (0 Replies)
Discussion started by: bhagya.puccha
0 Replies

10. Programming

C Headers

Where can i get C/C++ headers for OS MINIX 2.0.3? (0 Replies)
Discussion started by: biosdos
0 Replies
Login or Register to Ask a Question