I need to increase length of 2 arrays according to user input. I'm using the code below. But output is not matching with user input.

 #include<stdio.h> int main() { int i=0, key=0, size[key], time[key]; while (key!=-1) { printf("Insert value for size : "); scanf("%d",&size[i]); printf("Insert value for time : "); scanf("%d",&time[i]); i++; printf("Run again Press-1 or Exit : "); scanf("%d",&key); } int x=0; for (x ; x<i ; x++) { printf("%d %d\n",size[x],time[x]); } return 0; } 

When user inputs the values:

 35 4 20 3 40 1 60 7 20 8 

Then this is the output:

 8 4 20 3 40 1 60 7 20 8 

If length of array exceeded 4, the last element of the time array will be printed as the first element of the size array.

Why does my program give this output?

8

1 Answer

Something to get you started.

Use realloc() to re-size the memory pointer to by a pointer.

#include <stdlib.h> #include <stdio.h> int main(void) { // Start with NULL and a size of 0 int *my_time = NULL; size_t sz = 0; while (!some_exit_condition) { long long ll; printf("Insert value for size : "); if (scanf("%lld", &ll) != 1) { puts("Numeric input missing"); break; } if (ll < 0 || ll > SIZE_MAX) { puts("Size out of range"); break; } sz = (size_t) ll; void *new_ptr = realloc(my_time, sz * sizeof *my_time); if (new_ptr == NULL && sz != 0) { puts("Out of memory"); break; } my_time = new_ptr; // do something with `my_time` and `sz` } // Clean-up free(my_time); my_time = NULL; sz = 0; return 0; } 
0

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy