• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 754
  • Last Modified:

structure printing

I'm trying to declare, initialize, and print the contents of a structure. The last printf attempts to print a structure within a structure. Is my info initialized properly and will it print properly?
Struct customer 
	{
	int account;
	char street[60];
	char citystate[20];
	int zip;
	float balance;
	int creditlimit;
	struct customer * account;
	};
 
Struct customer = {
	3303101122,
	"Jones Street",
	"Springfield MA",
	01104,
	5310.51,
	int 10000,
	struct customer * account = 0
	};
 
printf("\n",customer.account);
printf("\n", customer.street);
printf("\n", customer.citystate);
printf("\n", customer.zip);
printf("\n", customer.balance);
printf("\n", customer.creditlimit);
printf("\n", &customer[6]);

Open in new window

0
prebek
Asked:
prebek
  • 3
1 Solution
 
mrjoltcolaCommented:
printf() has format specifiers for basic data types, but those do NOT include structures.

For example, you can print:

%s - string / const char array / const char *
%d - integer
%f - float
%c - single character

See below, I have modified your statements with specifiers according to the data types you declared. However, to print an array of structs or nested structs, you must write a routine to print each member, can't print the whole thing.


printf("%d\n",customer.account);
printf("%s\n", customer.street);
printf("%s\n", customer.citystate);
printf("%d\n", customer.zip);
printf("%f\n", customer.balance);
printf("%d\n", customer.creditlimit);
// printf("\n", &customer[6]); // ILLEGAL, CANT PRINT A STRUCT OR ARRAY OF STRUCTS

Open in new window

0
 
mrjoltcolaCommented:
Also, a suggestion based on experience.

Use strings / char arrays for zipcode. Leading zeros will be preserved with a string, but not with a plain int.

Same goes for account code, if your accounts may have leading zeroes, then you will lose them unless using strings.
 
0
 
mrjoltcolaCommented:
Also printf supports multiple variables in the format.
printf("%d\n%s\n", customer.account, customer.street);

Open in new window

0
 
Infinity08Commented:
>> Leading zeros will be preserved with a string, but not with a plain int.

Not that a leading zero for an int literal (like 01104 for example) actually means that the value should be interpreted as an octal value instead of the normal decimal value. So keeping the leading 0 there actually changes the result from what you'd expect.


Also, the name of the struct type you defined is 'struct customer' (note the lowercase s of struct - keywords in C are all lowercase only). So, when instantiating that struct, you use the complete type name followed by the name of the instance. For example :

        struct customer myCustInstance;

optionally with an initialization between {}'s after it. May I suggest using an uppercase first character for the type names (ie. Customer instead of customer), and a lowercase first character for variable names (like myCustInstance) ? It makes it very easy to distinguish between types and variables.


Finally, the way you initialized the struct looks mostly ok, except for the last two fields where you forgot to leave out the field information - you should just put the desired value, so :

        10000,
        0

instead of :

>>    int 10000,
>>    struct customer * account = 0
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Managing Security Policy in a Changing Environment

The enterprise network environment is evolving rapidly as companies extend their physical data centers to embrace cloud computing and software-defined networking. This new reality means that the challenge of managing the security policy is much more dynamic and complex.

  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now