Cleanups.
[TD_C.git] / TP_7_C / exo2-full.c
CommitLineData
c2bc2b96
JB
1#include <stdio.h>
2#include <stdbool.h>
3
4/** Display a prompt to the user then wait for an integer input. */
5int promptValue(const char* prompt) {
6 printf("%s:\n", prompt);
7 int result;
8 scanf("%d", &result);
9 return result;
10}
11
12void displayMenuEntry(int index, const char* label) {
13 printf("%d | %s\n", index, label);
14}
15
16void displayMenu() {
17 displayMenuEntry(1, "Addition");
18 displayMenuEntry(2, "Substraction");
19 displayMenuEntry(3, "Multiplication");
20 displayMenuEntry(4, "XOR");
21 displayMenuEntry(5, "Exit");
22}
23
24/** Prompt the user for his operation choice.
25 *
26 * @return The selected operation. No invalid value can be returned.
27 */
28int promptOperation() {
29 displayMenu();
30 int result;
31
32 do {
33 result = promptValue("Choose an option");
34
35 if (result >= 1 && result <= 5) {
36 break;
37 }
38
39 puts("Please choose a valid option (1-5)");
40 } while (true);
41
42 return result;
43}
44
45int main() {
46 int operation = promptOperation();
47
48 if (operation == 5) {
49 return 0;
50 }
51
52 int initialValue = promptValue("Initial value");
53
54 do {
55 int nextValue = promptValue("Next value");
56
57 if (nextValue == 0) {
58 break;
59 }
60
61 switch (operation) {
62 // Addition
63 case 1:
64 initialValue += nextValue;
65 break;
66
67 // Substraction
68 case 2:
69 initialValue -= nextValue;
70 break;
71
72 // Multiplication
73 case 3:
74 initialValue *= nextValue;
75 break;
76
77 // XOR
78 case 4:
79 initialValue ^= nextValue;
80 break;
81 }
82
83 printf("Result: %d\n", initialValue);
84 } while (true);
85}