Prob
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}; }
Comments