neveen neveen Ответов: 2

Проблема в использовании функции в C


в чем проблема в этом коде?
У меня есть такая ошибка
conflicting types for ‘random’void random(org select[size]){


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

#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[3];

void random(org select[size]){



int i,j,r=0;
for (i=0; i< 3;i++){
       r = (rand() % (4 - 0)) + 0;
   for( j=0;j<6;j++){ 
    buf[i].bid[j]= select[r].id[j] ;
   strcpy(buf[i].bname[j], select[r].name[j]);
}}
for ( int i=0; i<4 ;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],"hello1");
sprintf(select[0].name[1],"hello2");
sprintf(select[0].name[2],"hello3");
sprintf(select[0].name[3],"hello4");

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],"tello1");
sprintf(select[4].name[1],"tello2");
sprintf(select[4].name[2],"tello3");
sprintf(select[4].name[3],"tello4");





   printf(" Initial id :\n");
   for(i=0;i<4 ;i++)                         
    {
        for(j=0;j< 4;j++)            			
        { 
            // Rgene = (rand() % (5 - 1)) + 1;
             select[i].id[j]= j;  		
}}


random(select);

}

2 Ответов

Рейтинг:
1

KarstenK

random-это стандартная функция в c-библиотеке. Используйте другое имя, например myRandom или randomize, чтобы решить эту проблему.


neveen neveen

спасибо, почему иногда у меня есть мусорное значение, когда я копирую имя в соответствии с его индексом (r)?

Richard MacCutchan

Смотрите мой ответ ниже.

Richard MacCutchan

На самом деле имя функции таково rand().

Рейтинг:
0

Richard MacCutchan

Вы пытаетесь получить доступ к структуре от указателя на ее первый элемент, поэтому он должен быть:

void random(org* select){


neveen neveen

а как насчет второго структурного баффа ?
Я определяю их так:* выберите[размер];
ошибка:ошибка сегментации

Richard MacCutchan

Ваши определения структуры все перепутаны. Вы объявляете select длиной 4, но затем пытаетесь получить доступ к 5 записям. У вас также есть несколько записей для идентификатора и имени внутри ваших структур. Это должно быть что-то вроде:

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

// ...

org select[size];

Затем вы можете обратиться к select indexed from 0 to size-1. Поэтому выберите[0].id, выберите[3].name и т. д.

neveen neveen

значение мусора что-то вроде этого cz � � w ^ @hello2 , это должно быть hello1 и идентификатор правильный, мусор показывают только при использовании индекса RAND

neveen neveen

Могу ли я скопировать просто id в соответствии с r , и имя справилось с этим ?

Richard MacCutchan

Да, что-то вроде:

int index = 0;
select[index].id = 22;
sprintf(select[index].name, "hello1");