// Error a propósito: dos formas de leer un archivo binario que pierden bytes.
// Se compila con -fsigned-char: con char sin signo, el primer ciclo no termina nunca.
#include <cstdio>
#include <fstream>
#include <iostream>
#include <string>

int main() {
    const std::string path = "build/stop_at_ff.bin";
    {
        std::ofstream out(path, std::ios::binary);
        out << 'a' << ' ' << 'b' << '\xFF' << 'c' << '\n' << 'd';
    }
    {
        std::ifstream in(path, std::ios::binary);
        int count = 0;
        char c;
        // get() devuelve int, para que EOF no se confunda con un byte. Guardarlo en char los confunde.
        while ((c = static_cast<char>(in.get())) != EOF) {
            count++;
        }
        std::cout << "con char y EOF: " << count << " bytes de 7\n";
    }
    {
        std::ifstream in(path, std::ios::binary);
        int count = 0;
        char c;
        // >> se salta los espacios en blanco, también en modo binario.
        while (in >> c) {
            count++;
        }
        std::cout << "con >>:         " << count << " bytes de 7\n";
    }
    {
        std::ifstream in(path, std::ios::binary);
        int count = 0;
        int c;
        while ((c = in.get()) != EOF) {
            count++;
        }
        std::cout << "con int y EOF:  " << count << " bytes de 7\n";
    }
    std::remove(path.c_str());
    return 0;
}
