8 int prompt_value(const char* msg
, int* result
) {
10 int retVal
= scanf("%d", result
);
11 return (retVal
== 1) ? 0 : 1;
14 int* prompt_array(int array
[], unsigned* size
) {
15 int errno
= prompt_value("Taille du tableau?", (int*)size
);
16 array
= create_tab(array
, *size
);
17 for (unsigned i
= 0; i
< *size
; i
++) {
18 errno
+= prompt_value("Valeur?", &array
[i
]);
20 /* error might have occured */
21 handle_prompt_error(errno
);
25 void display_choice_menu() {
26 printf("\n=== Menu ===\n\n");
27 printf("1) Saisir puis concatener un autre tableau.\n");
28 printf("2) Trier le tableau.\n");
29 printf("3) Afficher le tableau.\n");
30 printf("4) Compter le nombre d'occurence d'un entier dans le tableau.\n");
31 printf("5) Compter le nombre d'entiers pairs dans le tableau.\n");
32 printf("6) Compter le nombre d'entiers impairs dans le tableau.\n");
33 printf("7) Redimensionner le tableau.\n");
34 printf("8) Quitter.\n");
37 int* do_concat(int array
[], unsigned* size
) {
38 int* tab_to_concat
= NULL
;
39 unsigned tab_to_concat_size
= 0;
40 printf("\n=== Saisie d'un tableau ===\n\n");
41 tab_to_concat
= prompt_array(tab_to_concat
, &tab_to_concat_size
);
42 int* tab_concat
= concat_tab(array
, *size
, tab_to_concat
, tab_to_concat_size
);
43 *size
+= tab_to_concat_size
;
45 free_tab(tab_to_concat
);
49 void do_sort(int array
[], unsigned size
) {
53 s_criteria_cb sort_criteria
;
55 printf("\n=== Menu de tri ===\n\n");
56 printf("1) Croissant.\n");
57 printf("2) Decroissant.\n");
58 printf("3) Croissant pairs en premier.\n");
59 printf("4) Croissant impairs en premier.\n");
61 errno
= prompt_value("Choix?", &choice
);
62 handle_prompt_error(errno
);
64 if (1 > choice
|| 4 < choice
) {
65 printf("\nFaire un choix compris entre 1 et 4\n");
71 sort_criteria
= ascending
;
74 sort_criteria
= descending
;
77 sort_criteria
= ascending_and_even
;
80 sort_criteria
= ascending_and_odd
;
83 /* sort ascending by default, unused code path */
84 sort_criteria
= ascending
;
87 sort_tab(array
, size
, sort_criteria
);
90 void do_count(int array
[], unsigned size
) {
94 errno
= prompt_value("\nValeur a chercher?", &search_value
);
95 handle_prompt_error(errno
);
96 printf("La valeur %d est presente %d fois dans le tableau\n", search_value
, count_tab_element(array
, size
, search_value
));
99 void do_resize(int array
[], unsigned* old_size
) {
101 unsigned new_size
= 0;
103 errno
= prompt_value("\nNouvelle taille?", (int*)&new_size
);
104 handle_prompt_error(errno
);
105 /* FIXME: one should able the set the array new content if new_size > *old_size
106 * for now, new values are zeroed */
107 array
= resize_tab(array
, *old_size
, new_size
);
108 *old_size
= new_size
;
111 void handle_prompt_error(int errno
) {
113 printf("\nMerci de saisir un nombre entier, exiting\n");
114 /* it's somewhat violent but better than looping forever */
119 void display_array(int array
[], unsigned size
) {
121 printf("\n--array begin--\n");
122 for (unsigned i
= 0; i
< size
; i
++) {
123 printf("value in array at index[%d]=%d\n", i
, array
[i
]);
125 printf("--array end--\n");
127 printf("\n--array NULL--\n");