Advertisement
Guest User

Untitled

a guest
Sep 21st, 2013
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.74 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define ITEMS_COUNT 16
  6.  
  7. unsigned int randr(unsigned int min, unsigned int max);
  8. inline short randomType();
  9. inline char* randomCompanyName();
  10. inline char* randomPersonName();
  11. inline char* randomPersonSurname();
  12. void populateItems();
  13. void dumpItems();
  14.  
  15. typedef unsigned short int DBID;
  16.  
  17. typedef struct {
  18.     char name[64];
  19.     char surname[64];
  20. } Person;
  21.  
  22. typedef struct {
  23.     char name[128];
  24. } Company;
  25.  
  26. typedef struct {
  27.     unsigned short int type;
  28.     DBID dbID;
  29.     union {
  30.         Person PersonItem;
  31.         Company CompanyItem;
  32.     } chosenItem;
  33. } Item;
  34.  
  35. enum E_TYPE {
  36.     TYPE_PERSON,
  37.     TYPE_COMPANY
  38. };
  39.  
  40. Item
  41.     itemList[ITEMS_COUNT];
  42.  
  43. int main(int argc, char* argv[]) {
  44.     /* Init stuff */
  45.     srand(time(NULL));
  46.    
  47.     populateItems();
  48.     dumpItems();
  49.     return 0;
  50. }
  51.  
  52. void populateItems() {
  53.     Item
  54.         singleItem;
  55.     size_t
  56.         i = 0;
  57.    
  58.     for(; i != ITEMS_COUNT; ++i) {
  59.         singleItem.dbID =   i + 1;
  60.         singleItem.type = randomType();
  61.        
  62.         if(TYPE_PERSON == singleItem.type) {
  63.             strncpy(singleItem.chosenItem.PersonItem.name, randomPersonName(), sizeof(singleItem.chosenItem.PersonItem.name));
  64.             strncpy(singleItem.chosenItem.PersonItem.surname, randomPersonSurname(), sizeof(singleItem.chosenItem.PersonItem.surname));
  65.         } else {
  66.             strncpy(singleItem.chosenItem.CompanyItem.name, randomCompanyName(), sizeof(singleItem.chosenItem.CompanyItem.name));
  67.         }
  68.         memcpy(&itemList[i], &singleItem, sizeof(singleItem));
  69.     }
  70. }
  71.  
  72. void dumpItems() {
  73.     Item
  74.         *currentItem;
  75.     size_t
  76.         i = 0;
  77.     char
  78.         str[256];
  79.        
  80.     for(; i != ITEMS_COUNT; ++i) {
  81.         currentItem = &itemList[i];
  82.    
  83.         //Not safe sprintf!
  84.         sprintf(str, "Row %d: { dbID: %d,", i + 1, currentItem->dbID);
  85.        
  86.         if(TYPE_PERSON == currentItem->type) {
  87.             sprintf(str, "%s name: %s, surname: %s }", str, currentItem->chosenItem.PersonItem.name, currentItem->chosenItem.PersonItem.surname);
  88.         } else {
  89.             sprintf(str, "%s company name: %s }", str, currentItem->chosenItem.CompanyItem.name);
  90.         }
  91.        
  92.         printf("%s\n", str);
  93.     }
  94. }
  95.  
  96. inline short randomType() {
  97.     return randr(0, 1);
  98. }
  99.  
  100. inline char* randomCompanyName() {
  101.     static char*
  102.         nameList[32] = {
  103.         "Microsoft",
  104.         "Valve",
  105.         "Vamonos pest",
  106.         "Hello folks!",
  107.         "Just a program inc"
  108.     };
  109.     return nameList[randr(0, 4)];
  110. }
  111.  
  112. inline char* randomPersonName() {
  113.     static char*
  114.         nameList[32] = {
  115.         "John",
  116.         "Mike",
  117.         "Emily",
  118.         "Jessica",
  119.         "Steven"
  120.     };
  121.     return nameList[randr(0, 4)];
  122. }
  123.  
  124. inline char* randomPersonSurname() {
  125.     static char*
  126.         nameList[32]  = {
  127.         "Ross",
  128.         "Litt",
  129.         "Hellyeah"
  130.     };
  131.     return nameList[randr(0, 2)];
  132. }
  133.  
  134. unsigned int randr(unsigned int min, unsigned int max)
  135. {
  136.     double
  137.         scaled = (double) rand() / RAND_MAX;
  138.        
  139.     return (max - min + 1) * scaled + min;
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement