TP 13 exo1: Implement a FIXME on array dynamic resizing
authorJerome Benoit <jerome.benoit@sap.com>
Thu, 23 Mar 2017 15:26:28 +0000 (16:26 +0100)
committerJerome Benoit <jerome.benoit@sap.com>
Thu, 23 Mar 2017 15:26:28 +0000 (16:26 +0100)
Signed-off-by: Jerome Benoit <jerome.benoit@sap.com>
TP_13/exo1/lib/array.c
TP_13/exo1/lib/io.c

index db8ab7e408d625d00db9873d5c363d5d22d1e0c8..c4e227db1435dc6e9fd7c03880acbc384053e9d9 100644 (file)
@@ -43,6 +43,7 @@ int* concat_tab(int tab1[], unsigned tab_size1, int tab2[], unsigned tab_size2)
 
 int* resize_tab(int tab[], unsigned old_tab_size, unsigned new_tab_size) {
     tab = realloc(tab, sizeof(int) * new_tab_size);
+    /* zero by default the added cells */
     if (old_tab_size < new_tab_size) {
         for (unsigned i = old_tab_size; i < new_tab_size; i++) {
             tab[i] = 0;
index 69b13d768f2b68e4cd0a01e01f2e23ab30a8368a..b0a66a0fb1b14f4cc821a475c0a8558e9c90a44d 100644 (file)
@@ -15,10 +15,10 @@ int* prompt_array(int array[], unsigned* size) {
     int errno = prompt_value("Taille du tableau?", (int*)size);
     array = create_tab(array, *size);
     for (unsigned i = 0; i < *size; i++) {
-       errno += prompt_value("Valeur?", &array[i]);
+        errno += prompt_value("Valeur?", &array[i]);
+        /* error might have occured */
+        handle_prompt_error(errno);
     }
-    /* error might have occured */
-    handle_prompt_error(errno);
     return array;
 }
 
@@ -102,9 +102,14 @@ void do_resize(int array[], unsigned* old_size) {
 
     errno = prompt_value("\nNouvelle taille?", (int*)&new_size);
     handle_prompt_error(errno);
-    /* FIXME: one should able the set the array new content if new_size > *old_size 
-     * for now, new values are zeroed */
     array = resize_tab(array, *old_size, new_size);
+    if (new_size > *old_size) {
+        printf("Saisie des valeurs supplementaires du tableau\n");
+        for (unsigned i = *old_size; i < new_size; i++) {
+            errno += prompt_value("Valeur?", &array[i]);
+            handle_prompt_error(errno);
+        }
+    }
     *old_size = new_size;
 }