Prob

PHOTO EMBED

Thu Mar 28 2024 11:06:44 GMT+0000 (Coordinated Universal Time)

Saved by @Shmotyu

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
 
typedef struct
{
    char **arr;
    int size;
} Arr;
 
typedef struct
{
    char *Name;
    int Count;
    float Rating;
} Product;
 
Arr input(FILE *f);
 
int main(void)
{
    Arr nouns;
    Arr adj;
 
    Product pr1;
 
    FILE *fn;
    FILE *fa;
    FILE *out;
 
    char *name;
    int i;
    int j;
    int n;
    int a;
 
    srand(time(NULL));
 
    fn = fopen("noun.txt", "r");
 
    if (fn == NULL)
    {
        printf("Error openning file");
        return 1;
    }
 
    fa = fopen("adj.txt", "r");
    
    if(fa == NULL)
    {
        printf("Error openning file");
        fclose(fn);
        return 1;
    }
 
    out = fopen("output.txt", "w");
 
    if(fgetc(fn) == EOF || fgetc(fa) == EOF)
    {
        fclose(fn);
        fclose(fa);
        fclose(out);
        printf("file is empty!");
        return 1;
    }
    else
    {
        fseek(fn, 0, SEEK_SET);
        fseek(fa, 0, SEEK_SET);
    }
 
    nouns = input(fn);
    adj = input(fa);
 
    n = rand() % nouns.size;
    a = rand() % adj.size;
 
    pr1.Count = rand() % 100;
    pr1.Rating = (float)(rand() % 100) / 10.0; // Generating a float rating between 0 and 10
 
    name = malloc(sizeof(char));
 
    i = 0;
    j = 0;
 
    while (1)
    {
        if (adj.arr[a][i] != '\0')
        {
            name = realloc(name, sizeof(char) * (i + 1));
            name[i] = adj.arr[a][i];
            i++;
        }
        else
        {
            name = realloc(name, sizeof(char) * (i + 1));
            name[i] = ' ';
            i++;
            break;
        }
    }
 
    while (1)
    {
        if (nouns.arr[n][j] != '\0')
        {
            name = realloc(name, sizeof(char) * (i + 1));
            name[i] = nouns.arr[n][j];
            i++;
            j++;
        }
        else
        {
            name = realloc(name, sizeof(char) * (i + 1));
            name[i] = '\0';
            break;
        }
    }
    pr1.Name = name;
 
    fprintf(out, "%s %d %.1f", pr1.Name, pr1.Count, pr1.Rating);
 
    free(name);
    for (int k = 0; k < nouns.size; k++)
    {
        free(nouns.arr[k]);
    }
    for (int k = 0; k < adj.size; k++)
    {
        free(adj.arr[k]);
    }
    free(nouns.arr);
    free(adj.arr);
 
    fclose(fn);
    fclose(fa);
    fclose(out);
 
    return 0;
}
 
Arr input(FILE *f)
{
    char **arr;
    char r;
    int size_w = 0;
    int count_w = 0;
 
    arr = malloc(sizeof(char *));
    arr[0] = malloc(sizeof(char));
 
    while ((r = fgetc(f)) != EOF)
    {
        if (r != '\0' && r != ' ')
        {
            if (r == '\n')
            {
                arr[count_w] = realloc(arr[count_w], (size_w + 1) * sizeof(char));
                arr[count_w][size_w] = '\0';
                count_w += 1;
                arr = realloc(arr, (count_w + 1) * sizeof(char *));
                arr[count_w] = malloc(sizeof(char));
                size_w = 0;
            }
            else
            {
                arr[count_w] = realloc(arr[count_w], (size_w + 1) * sizeof(char));
                arr[count_w][size_w] = r;
                size_w += 1;
            }
        }
    }
    count_w++;
    return (Arr){arr, count_w};
}
content_copyCOPY