A checksum condenses several input characters into one value that can be checked.

checksum The loop accumulates each digit into a compact validation total.
expected value The final comparison turns the checksum into an explicit pass or fail status.

Checksum Validate

useAlt
checksum_validate.c
Replay: real traced execution (multi-file project)
#include <stdio.h>

int digitChecksum(const char *text) {
    int sum = 0;
    for (int i = 0; text[i] != '\0'; i++) {
        sum += text[i] - '0';
    }
    return sum;
}

int main(void) {
    int useAlt = 0;
    const char *digits = useAlt ? "1235" : "1234";
    int expected = 10;
    int checksum = digitChecksum(digits);
    int ok = checksum == expected;

    printf("useAlt=%d digits=%s checksum=%d ok=%d\n", useAlt, digits, checksum, ok);
    return 0;
}
#include <stdio.h>

int digitChecksum(const char *text) {
    int sum = 0;
    for (int i = 0; text[i] != '\0'; i++) {
        sum += text[i] - '0';
    }
    return sum;
}

int main(void) {
    int useAlt = 1;
    const char *digits = useAlt ? "1235" : "1234";
    int expected = 10;
    int checksum = digitChecksum(digits);
    int ok = checksum == expected;

    printf("useAlt=%d digits=%s checksum=%d ok=%d\n", useAlt, digits, checksum, ok);
    return 0;
}
  1. useAlt ← 0, digits ← 1234, expected ← 10

    11int main(void) {12    int useAlt→ 0 = 0; //@useAlt=113    const char *digits→ 1234 = useAlt0 ? "1235" : "1234";14    int expected→ 10 = 10;15    int checksum = digitChecksum(digits1234);16    int ok = checksum == expected;
  2. sum ← 0

    3int digitChecksum(const char *text1234) {4    int sum→ 0 = 0;5    for (int i = 0; text[i] != '\0'; i++) {
  3. sum ← 1

    pass 1 of 4
    4int sum = 0;5for (int i0 = 0; text[i]1 != '\0'; i++) {6    sum→ 1 += text[i]1 - '0';7}
    All 4 passes — pass 1 is the card above
    passitext[i]sum
    1010 1
    2121 3
    3233 6
    4346 10
  4. return sum;

    7    }8    return sum10;9}
  5. checksum ← 10, ok ← 1

    14    int expected = 10;15    int checksum→ 10 = digitChecksum(digits1234);16    int ok→ 1 = checksum10 == expected10;1718    printf("useAlt=%d digits=%s checksum=%d ok=%d\n", useAlt0, digits1234, checksum10, ok1);19    return 0;20}
    outputuseAlt=0 digits=1234 checksum=10 ok=1
  1. useAlt ← 1, digits ← 1235, expected ← 10

    11int main(void) {12    int useAlt→ 1 = 1;13    const char *digits→ 1235 = useAlt1 ? "1235" : "1234";14    int expected→ 10 = 10;15    int checksum = digitChecksum(digits1235);16    int ok = checksum == expected;
  2. sum ← 0

    3int digitChecksum(const char *text1235) {4    int sum→ 0 = 0;5    for (int i = 0; text[i] != '\0'; i++) {
  3. sum ← 1

    pass 1 of 4
    4int sum = 0;5for (int i0 = 0; text[i]1 != '\0'; i++) {6    sum→ 1 += text[i]1 - '0';7}
    All 4 passes — pass 1 is the card above
    passitext[i]sum
    1010 1
    2121 3
    3233 6
    4356 11
  4. return sum;

    7    }8    return sum11;9}
  5. checksum ← 11, ok ← 0

    14    int expected = 10;15    int checksum→ 11 = digitChecksum(digits1235);16    int ok→ 0 = checksum11 == expected10;1718    printf("useAlt=%d digits=%s checksum=%d ok=%d\n", useAlt1, digits1235, checksum11, ok0);19    return 0;20}
    outputuseAlt=1 digits=1235 checksum=11 ok=0