From 152714b4ea7a814f7b32922279c79043d53ff1b1 Mon Sep 17 00:00:00 2001 From: my name Date: Fri, 5 Jun 2026 08:37:48 +0200 Subject: [PATCH] enable inputs --- qscr/c/gai/fixedynarr.c | 42 ++++++++++++++++++----------------------- 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/qscr/c/gai/fixedynarr.c b/qscr/c/gai/fixedynarr.c index ee1d747..ac68857 100644 --- a/qscr/c/gai/fixedynarr.c +++ b/qscr/c/gai/fixedynarr.c @@ -1,4 +1,3 @@ - #include #include #include @@ -10,17 +9,16 @@ struct IntArrayStr{ }; void read_int_array_str(struct IntArrayStr *in_str) { - printf("inputlength:%zu\n", in_str->length); for (size_t i = 0; i < in_str->length; i++) { printf("digit:%zu = %d\n", i, in_str->data[i]); } } struct IntArrayStr *create_int_array_str(size_t in_capacity) { - struct IntArrayStr *mystr = malloc(sizeof(struct IntArrayStr)); /* allocate memory for struct */ + struct IntArrayStr *mystr = malloc(sizeof(struct IntArrayStr)); //allocate memory for struct - mystr->data = malloc(sizeof(int) * in_capacity); /* make sure the pointer in the struct points to the array */ - mystr->length = 0; //forgot to actually assign a value to the struct + mystr->data = malloc(sizeof(int) * in_capacity); //make sure the pointer in the struct points to the array + mystr->length = 0; //forgot to actually assign a value to the struct mystr->capacity = in_capacity; if (mystr->data == NULL) { @@ -30,39 +28,35 @@ struct IntArrayStr *create_int_array_str(size_t in_capacity) { return mystr; } +/* push value to struct, also handle realloc */ void push_int_array_str(int in_int, struct IntArrayStr *in_str){ - if (in_str->length == in_str->capacity) { - in_str->capacity*=2; + if (in_str->length == in_str->capacity) { //check if already full + in_str->capacity*=2; //if so we should double printf("intarray capacity is now:%zu\n", in_str->capacity); - int *temp; - temp = realloc(in_str->data, sizeof(int)*in_str->capacity); - if(temp == NULL){exit(0);}; - in_str->data = temp; - printf("intarray length is now:%zu\n", in_str->length); + int *temp; //create a temporary pointer + temp = realloc(in_str->data, sizeof(int)*in_str->capacity); //realloc the data into a new bucket + if(temp == NULL){exit(0);}; //check if actually valid + in_str->data = temp; //if valid, make sure the pointer in the struct points to the realloced block } in_str->data[in_str->length] = in_int; printf("number:%zu = %d\n", in_str->length, in_str->data[in_str->length]); - in_str->length++; //didn't read the flow when transfering and accidentally put this in the if block + in_str->length++; //didn't read the flow when transferring and accidentally put this in the if block + printf("intarray length is now:%zu\n", in_str->length); //also had an off-by-one error because I increased length before doing anything } int main() { srand(time(NULL)); - // change to while loop and take inputs rather than fill with random numbers printf("input numbers:\n"); - //int input; - size_t length = 10; - /* while (input != -1) { */ - /* scanf("%d", &input); */ - /* length++; */ - /* } */ - struct IntArrayStr *myintarraystr = create_int_array_str(2); - for (size_t i = 0; i < length; i++) { - int input = rand() % 10; - push_int_array_str(input, myintarraystr); + int input; + size_t length = 10; + + while (input != -1) { + scanf("%d", &input); + push_int_array_str(input, myintarraystr); } read_int_array_str(myintarraystr);