#include <iostream>
#include <fstream>
// #include <cctype>

// Программа, которая считает количество цифр в текстовом файле
// При отсутствии имени файла возвращает код ошибки -1
// При проблеме с открытием файла возвращает код ошибки -2


int main(int argc, char** argv) {

    if (argc != 2) {
        // Если количество аргументов не равно двум, завершить программу с кодом ошбки -1
        // Вывести суть проблемы в стандартный поток ошибок
        std::cerr << "Enter one name of file as an argument!\n";
        return -1;
    }
    std::ifstream file_descriptor(argv[1], std::ios::in);
    if (!file_descriptor) {
        // В случае если возникла ошибка во время открытия файла
        std::cerr << "Can\'t open file with name \"" << argv[1] << "\"!\n";
        return -2;
    }
    // Файл открылся, можно читать
    int digits_counter = 0;
    // Цикл ниже закончится тогда, когда закончится файл (ну или формально, возникнет ошибка другого рода)
    // Значение поля eofbit в объекте file_descripor, задастся методом get, тогда цикл закончится
    while (file_descriptor) {
        int symbol = file_descriptor.get();
        // Вариант номер один, с использованием свойства символов в таблице кодировки
        if ((symbol >= '0') && (symbol <= '9')) {
            ++digits_counter;
        }
        /*
        // Вариант номер два, с использованием заголовочника <cctype>
        // isdigit вернет 1, если симовол есть цифра
        if (isdigit(symbol)) {
            ++digits_counter;
        }
        */
    }
    file_descriptor.close();
    std::cout << "File \"" << argv[1] << "\" has " << digits_counter << " digit(s).\n";
    return 0;
}