Click here to Skip to main content
15,893,663 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
In this code I'm trying to call
rrandom
to choose one random id and name and put it in buff struct , and second time calling
rrandom
to choose new random value and putting it also in buff struct , how can assign the second value to buff struct without delete the first one?

What I have tried:

#include <stdio.h>    
#include <stdlib.h>   
#include <string.h>  
#define size 4

 typedef struct Org             		
{
   int  id[4]; 
   char name[4][7];  
}org;



struct buff
{
int bid[4];
char bname[4][7];
};
struct buff buf[2];

void rrandom(org select[size]){



int i,j,r=0;
for (i=0; i<1;i++){
       r = (rand() % (4 - 0)) + 0;
   for( j=0;j<4;j++){ 
    buf[i].bid[j]= select[r].id[j] ;
   strcpy(buf[i].bname[j], select[r].name[j]);
   printf("------r=%d \n" ,r);
}}
for ( int i=0; i<2 ;i++){
     
   for(int j=0;j<4;j++){ 
printf("bname %s  bid = %d \n", buf[i].bname[j], buf[i].bid[j]);

}}

}

void main(  )
{
int i,j;
org select[size]; 

sprintf(select[0].name[0],"1ello1");
sprintf(select[0].name[1],"1ello2");
sprintf(select[0].name[2],"1ello3");
sprintf(select[0].name[3],"1ello4");

sprintf(select[1].name[0],"2ello1");
sprintf(select[1].name[1],"2ello2");
sprintf(select[1].name[2],"2ello3");
sprintf(select[1].name[3],"2ello4");

sprintf(select[2].name[0],"3ello1");
sprintf(select[2].name[1],"3ello2");
sprintf(select[2].name[2],"3ello3");
sprintf(select[2].name[3],"3ello4");

sprintf(select[3].name[0],"4ello1");
sprintf(select[3].name[1],"4ello2");
sprintf(select[3].name[2],"4ello3");
sprintf(select[3].name[3],"4ello4");

sprintf(select[4].name[0],"5ello1");
sprintf(select[4].name[1],"5ello2");
sprintf(select[4].name[2],"5ello3");
sprintf(select[4].name[3],"5ello4");


   printf(" Initial id :\n");
   for(i=0;i<4 ;i++)                         
    {
        for(j=0;j< 4;j++)            			
        { 
             select[i].id[j]= j;  		
}}


rrandom(select);
rrandom(select);

for ( int i=0; i<2 ;i++){
     
   for(int j=0;j<4;j++){ 
printf("from main bname %s  bid = %d ", buf[i].bname[j], buf[i].bid[j]);

}
printf("\n\n");
}

}
Posted
Updated 9-May-18 1:47am
v2

The proper way to do that is modify the rrandom function in order to accept a pointer to the struct buff you intend to modify. E.g.
C
void rrandom( org select[], struct buff * pbuff)
{
  //...
}


And then call it appropriately, e.g.
C
rrandom(select, &buf[0]); // fill the first array item
rrandom(select, &buf[1])); // fill the second array item
 
Share this answer
 
v3
Comments
neveen neveen 9-May-18 5:20am    
why do that ?
CPallini 9-May-18 5:25am    
In order to change the selected item of the buf array. Passing it explicitely to the function is the best way.
neveen neveen 9-May-18 5:29am    
but the result same , just one item adding to buff struct :(
CPallini 9-May-18 5:47am    
One item at time, that is 'one item per call'.
neveen neveen 9-May-18 5:57am    
Ok, thank, the result in main print just the second item
Why are you still doing this, after I explained the solution to you yesterday?
See Issue in using function in C[^].
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900