CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

Changing multiple Variables in struct in one command

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
_olaf_



Joined: 24 Feb 2005
Posts: 32

View user's profile Send private message

Changing multiple Variables in struct in one command
PostPosted: Tue Feb 03, 2015 5:28 am     Reply with quote

Hi,

I have a question about structures.

I have a structure with some variables

Code:

typedef struct MenuStructure
{
char LcdString[20];
char MenuIndex[3];
unsigned char up;
unsigned char down;
unsigned char enter;
}MenuStructure;


If I want to change one of the variables I can make ist as followed
Code:

MenuStructure.up =1;


But how can I Change all the Variables with one command? e.g.
Code:

MenuStructure = {"test", 3, 0, 0, 0};

does not work.

Does anyone have an idea how to do this?
And yes, I'm not a professional software developer

CompilerVersion PCW 5.038
kWoody_uk



Joined: 29 Jan 2015
Posts: 47
Location: United Kingdom

View user's profile Send private message

PostPosted: Tue Feb 03, 2015 6:26 am     Reply with quote

Hi,

You were close, but you need to actually create the structure variable first:-

Code:

typedef struct MenuStructure {
    char LcdString [20];
    char MenuIndex [3];
    unsigned char up;
    unsigned char down;
    unsigned char enter;
} MenuStructure;    // Remember, because you used Typedef, this is NOT a variable name, but the typename


void main( void )
{   
    MenuStructure menu = { "test", 3, 0, 0, 0 };
   
    menu.down = 3;
}



Best Regards,


Keith
_olaf_



Joined: 24 Feb 2005
Posts: 32

View user's profile Send private message

PostPosted: Tue Feb 03, 2015 6:56 am     Reply with quote

Thanks for your answer
If I use the following code in the main
Code:

void main( void )
{   
    MenuStructure menu = { "test", 3, 0, 1, 0 };
   
    menu.down = 3;
}


does that mean that the variables contain

LcdString= test
MenuIndex= 3
up= 0
down= 1
enter= 0

after the code
Code:
MenuStructure menu = { "test", 3, 0, 1, 0 };


and in the next step

LcdString= test
MenuIndex= 3
up= 0
down= 3
enter= 0

after the code
Code:
menu.down = 3;

?
kWoody_uk



Joined: 29 Jan 2015
Posts: 47
Location: United Kingdom

View user's profile Send private message

PostPosted: Tue Feb 03, 2015 7:42 am     Reply with quote

Yes, you are correct but also note that LcdString will also contain the null char after the t in test to terminate the string.

I only added the
Code:

menu.down = 3;

as another example of changing the elements of the structure (but you already knew this). You are correct though.

Best regards,


Keith
_olaf_



Joined: 24 Feb 2005
Posts: 32

View user's profile Send private message

PostPosted: Tue Feb 03, 2015 1:54 pm     Reply with quote

So, I tried it today, but it doesn't work Confused
the processor is included in the main.h and linked in MPLAB X

I changed my Code to the only things I need
Code:
typedef struct MenuStructure {
    char LcdString [20];
    char MenuIndex [3];
    unsigned char up;
    unsigned char down;
    unsigned char enter;
}MenuStructure;    // Remember, because you used Typedef, this is NOT a variable name, but the typename



void main(void)
{

MenuStructure menu = { "test", 2, 0, 0, 0 };
MenuStructure.up =1;

}


When I compile this test program I get the following error messages
Quote:
D:\Programmierung\PIC_C\Struct_Test\Struct_Test.X\main.c:16:39: Error#102 Expect comma <- This is an Error for the first Line in main
D:\Programmierung\PIC_C\Struct_Test\Struct_Test.X\main.c:16:43: Error#43 Expecting a declaration <- 1. line
D:\Programmierung\PIC_C\Struct_Test\Struct_Test.X\main.c:16:44: Error#43 Expecting a declaration <- 1. line
D:\Programmierung\PIC_C\Struct_Test\Struct_Test.X\main.c:17:14: Error#28 Expecting an identifier <- 1.line
D:\Programmierung\PIC_C\Struct_Test\Struct_Test.X\main.c:17:18: Error#43 Expecting a declaration <- 1.line
D:\Programmierung\PIC_C\Struct_Test\Struct_Test.X\main.c:17:19: Error#43 Expecting a declaration <- 2. line
D:\Programmierung\PIC_C\Struct_Test\Struct_Test.X\main.c:17:20: Error#43 Expecting a declaration <- 2. line
D:\Programmierung\PIC_C\Struct_Test\Struct_Test.X\main.c:19:1: Error#43 Expecting a declaration
8 Errors, 0 Warnings.


Any Idea?
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Feb 03, 2015 2:13 pm     Reply with quote

Quote:
MenuStructure.up =1;

You're trying to initialize a typedef. That's not what you intend.
You want to initialize an element of the actual instance of the structure.

Quote:
MenuStructure menu = { "test", 2, 0, 0, 0 };

I don't know if you're aware of it, but the line above does not initialize
elements 'down' or 'enter'. Look at the .LST file. Change the init values
from 0,0,0 to 3,4,5 so you can see it more clearly.
Ttelmah



Joined: 11 Mar 2010
Posts: 19380

View user's profile Send private message

PostPosted: Tue Feb 03, 2015 2:14 pm     Reply with quote

Your types need to match what you are giving.
The single digit '2', does not match an array.
Code:

MenuStructure menu = { "test", {2,0,0}, 0, 0, 0 };
menu.up = 3;


You can initialise a char array with a text string, or with numbers to fill the array (as I show). It needs to see a declaration for the first char array, then one for the second, then three values.

Then on your second line you try to write the value to the typedef, not the variable....

Use a 'indicator name' for the typedef, like:
Code:

typedef struct MenuStructure {
    char LcdString [20];
    char MenuIndex [3];
    unsigned char up;
    unsigned char down;
    unsigned char enter;
}MenuStructure_type;    // Remember, because you used Typedef, this is NOT a variable name, but the typename


You make a point of reminding yourself that this is the typename, then forget it.....
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group