[C] Kopiowanie z tablicy znakow


(Michal S 95 12) #1

Cześć wszystkim, jestem początkującym programistą. Dzisiaj zetknąłem się z problemem, jak przekopiować elementu z tablicy (np. charow) do elementu struktury. Dla przykładu strukturę Czlowiek, złożoną z imienia i nazwisko chce uzupełnić losowo, losową ilością znaków z przedziału  [1, 20]. Dodatkowo imie i nazwisko maja się zaczynać wielkimi literami.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX 10
 

typedef struct person
{
   char name[MAX];
   char surname[MAX];
}person;
 


person function()
{
   person p;
   int i,n,w;
   char word0[MAX], word1[MAX];

   srand((unsigned)time(NULL));
   n=rand()%3;
   w=MAX-n;
   word0[0]=rand()%('Z'-'A')+'A';
   strcpy(p.name,&word0[0]);
   word1[0]=rand()%('Z'-'A')+'A';
   strcpy(p.surname,&word1[0]);
   for (i=1; i<w; i++)
   {
      word0[i]=rand()%('z'-'a')+'a';
      strcpy(p.name,&word0[i]);
      word1[i]=rand()%('z'-'a')+'a';
      strcpy(p.surname,&word1[i]);
   }
   return p;
}

Wkleiłem tylko fragment kodu. Program się kompiluje, jednak nie działa. Z góry dziękuję za pomoc.


(Ebleble) #2

 

Funkcja powinna wyglądać tak.

 

person function()

{

   person p;

   int i,n,w;

   char word0[MAX], word1[MAX];

   srand((unsigned)time(NULL));

   n=rand()%3;

   w = MAX - n - 1 ;

   word0[0]=rand()%(‘Z’-‘A’)+‘A’;

   word1[0]=rand()%(‘Z’-‘A’)+‘A’;

   

   for (i=1; i<w; i++)

   {

      word0_=rand()%(‘z’-‘a’)+‘a’;_

      word1_=rand()%(‘z’-‘a’)+‘a’;_

   }

   word0[w] = 0;

   word1[w] = 0;

   strcpy(p.name, &word0[0]);

   strcpy(p.surname, &word1[0]);

   return p;

}

 

A tak w ogóle, to nie ucz się C, tylko zaczynaj od razu od C++.


(enedil) #3

A ja polecam czyste C.

Znacznie lepiej znać C i n.p. Rust. niż C++ i Rust.


(mikolaj_s) #4

Zwróć uwagę na fakt że w C napisy kończą się znakiem NULL czyli zawsze są o jeden znak dłuższe niż faktyczna ilość liter. W kodzie @ebleble to widać.