Hola! como dice do-while vas a tener que usar memoria "dinamca", i.e. usar las funciones malloc() y calloc() y la mas importante free().
Aca te dejo las paginas del manual de las tres:
http://www.manpagez.com/man/3/malloc/Basicamente "void * malloc(size_t size)" te davuelve un arreglo (buffer) de la cantidad de memoria que vos le pidas, "void * calloc(size_t count, size_t size)" es casi lo mismo con la diferencia que te devuelve un arreglo o buffer con la cantidad de elementos del tamaño que vos le digas, y ademas
te devuelve la memoria inicializada a cero, cosa que malloc no hace, por ejemplo:
int *buffer = NULL;
buffer = (int *)malloc(100*sizeof(int));
te devuelve un arreglo con 100 enteros y la memoria sin inicializar.
int *buffer = NULL;
buffer = (int *)calloc(100, sizeof(int));
esto tambien te devuelve un arreglo de 100 enteros pero inicializados a cero.
Y la parte mas importante del uso de memoria dinamica es el
free(), lo que hace es liberar la memoria que asignaste con malloc() o calloc(), por que si no, vas a tener una fuga de memoria o como es mas conocido
"un memory leak" (
http://es.wikipedia.org/wiki/Fuga_de_memoria), por ejemplo:
char *buffer = malloc(100*sizeof(char)); /* Esto es qeuivalente a char arreglo[100]; */
....
.... uso del buffer
....
free(buffer);
COROLARIO: No hay que olvidarse de liberar con free() cada puntero asgnado con malloc() o calloc(), i.e. deberias tener en tu codo la misma cantidad de llamas: #free() = #malloc() + #calloc(). Si bien esto no simpre anda es un buen ejersicio para acostumbrace a liberar la memoria.Saludos!