Parcourir la source

Reworked functions to detect overflows.

Lorenz Bung il y a 8 ans
Parent
révision
c73ce10ddb
1 fichiers modifiés avec 8 ajouts et 2 suppressions
  1. 8
    2
      hw6/task1/src/main.rs

+ 8
- 2
hw6/task1/src/main.rs Voir le fichier

@@ -54,7 +54,10 @@ fn sum_strings(v: Vec<&str>) -> Result<i32, &str> {
54 54
     for x in v {
55 55
         match x.parse::<i32>() {
56 56
             Ok(val) => {
57
-                sum += val;
57
+                match i32::checked_add(sum, val) {
58
+                    Some(y) => {sum = y;}
59
+                    None => return Err("Overflow"),
60
+                }
58 61
             }
59 62
             Err(_) => return Err("Given String is not a int"),
60 63
         }
@@ -68,7 +71,10 @@ fn mul_strings(v: Vec<&str>) -> Result<i32, &str> {
68 71
     for x in v {
69 72
         match x.parse::<i32>() {
70 73
             Ok(val) => {
71
-                prod *= val;
74
+                match i32::checked_mul(prod, val) {
75
+                    Some(y) => {prod = y;}
76
+                    None => return Err("Overflow"),
77
+                }
72 78
             }
73 79
             Err(_) => return Err("Given String is not a int"),
74 80
         }

Chargement…
Annuler
Enregistrer