fork download
  1. #include <iostream>
  2. #include <fstream>
  3. // #include <cctype>
  4.  
  5. // Программа, которая считает количество цифр в текстовом файле
  6. // При отсутствии имени файла возвращает код ошибки -1
  7. // При проблеме с открытием файла возвращает код ошибки -2
  8.  
  9.  
  10. int main(int argc, char** argv) {
  11.  
  12. if (argc != 2) {
  13. // Если количество аргументов не равно двум, завершить программу с кодом ошбки -1
  14. // Вывести суть проблемы в стандартный поток ошибок
  15. std::cerr << "Enter one name of file as an argument!\n";
  16. return -1;
  17. }
  18. std::ifstream file_descriptor(argv[1], std::ios::in);
  19. if (!file_descriptor) {
  20. // В случае если возникла ошибка во время открытия файла
  21. std::cerr << "Can\'t open file with name \"" << argv[1] << "\"!\n";
  22. return -2;
  23. }
  24. // Файл открылся, можно читать
  25. int digits_counter = 0;
  26. // Цикл ниже закончится тогда, когда закончится файл (ну или формально, возникнет ошибка другого рода)
  27. // Значение поля eofbit в объекте file_descripor, задастся методом get, тогда цикл закончится
  28. while (file_descriptor) {
  29. int symbol = file_descriptor.get();
  30. // Вариант номер один, с использованием свойства символов в таблице кодировки
  31. if ((symbol >= '0') && (symbol <= '9')) {
  32. ++digits_counter;
  33. }
  34. /*
  35.   // Вариант номер два, с использованием заголовочника <cctype>
  36.   // isdigit вернет 1, если симовол есть цифра
  37.   if (isdigit(symbol)) {
  38.   ++digits_counter;
  39.   }
  40.   */
  41. }
  42. file_descriptor.close();
  43. std::cout << "File \"" << argv[1] << "\" has " << digits_counter << " digit(s).\n";
  44. return 0;
  45. }
Runtime error #stdin #stdout #stderr 0s 5504KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Enter one name of file as an argument!