neveen neveen Ответов: 2

Как добавить элементы без перезаписи в struct


В этом коде я пытаюсь позвонить
rrandom
чтобы выбрать один случайный идентификатор и имя и поместить его в структуру buff , а второй раз вызвать
rrandom
чтобы выбрать новое случайное значение и поместить его также в buff struct , как можно назначить второе значение buff struct, не удаляя первое?

Что я уже пробовал:

#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");
}

}

2 Ответов

Рейтинг:
2

CPallini

Правильный способ сделать это-изменить rrandom функция для того, чтобы принять указатель на struct buff вы намерены изменить, например.

void rrandom( org select[], struct buff * pbuff)
{
  //...
}


А затем назовите его соответствующим образом, например
rrandom(select, &buf[0]); // fill the first array item
rrandom(select, &buf[1])); // fill the second array item


neveen neveen

зачем это делать ?

CPallini

Для того чтобы изменить выбранный элемент массива buf. Передача его явно в функцию-это лучший способ.

neveen neveen

но результат тот же , только один элемент, добавляющий к структуре баффа :(

CPallini

Один пункт за раз, то есть "один пункт за звонок".

neveen neveen

Хорошо, спасибо, результат в основном печатается только второй пункт

Рейтинг:
2

Richard MacCutchan

Почему вы все еще делаете это, после того как я объяснил вам решение вчера?
Видеть Проблема в использовании функции в C[^].