SHARE
TWEET

os3

a guest Nov 14th, 2019 112 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #define MAX_LEN 255
  6.  
  7. //Функция вывода списка дисков
  8. void getDrives() {
  9.     DWORD n = GetLogicalDrives();
  10.     char d = 'A';
  11.     if (!n)
  12.         printf("Нет доступных дисков");
  13.     else
  14.         printf("Доступные диски:\n");
  15.     while (n > 0){
  16.         if (n & 1)
  17.             printf("%c ", d);
  18.         n = n >> 1;
  19.         d++;
  20.     }
  21.     printf("\n");
  22. }
  23.  
  24. void getDriveInfo() {
  25.    
  26.     char drivePath[MAX_LEN];
  27.     printf("Введите диск, о котором хотите получить информацию\nНапример: \"C:\\\"\n");
  28.     if (fgets(drivePath, MAX_LEN, stdin)) {
  29.         fflush(stdin);
  30.         drivePath[strlen(drivePath) - 1] = '\0';
  31.         UINT driveType = GetDriveTypeA(drivePath);
  32.         switch (driveType){
  33.             case DRIVE_UNKNOWN:
  34.                 printf("Не удалось определить тип диска\n");
  35.                 break;
  36.             case DRIVE_NO_ROOT_DIR:
  37.                 printf("Неверно введена корневая директория\n");
  38.                 break;
  39.             case DRIVE_REMOVABLE:
  40.                 printf("Съёмный диск\n");
  41.                 break;
  42.             case DRIVE_FIXED:
  43.                 printf("Локальный диск\n");
  44.                 break;
  45.             case DRIVE_REMOTE:
  46.                 printf("Удаленный (сетевой) диск\n");
  47.                 break;
  48.             case DRIVE_CDROM:
  49.                 printf("Дисковод\n");
  50.                 break;
  51.             case DRIVE_RAMDISK:
  52.                 printf("RAM-диск\n");
  53.                 break;
  54.         }
  55.         LPSTR volName = (LPSTR)malloc(sizeof *volName * MAX_LEN);
  56.         LPDWORD compLength = (LPDWORD)malloc(sizeof *compLength);
  57.         LPDWORD fileFlags = (LPDWORD)malloc(sizeof *fileFlags);
  58.         LPSTR fileSystem = (LPSTR)malloc(sizeof *fileSystem * MAX_LEN);
  59.         if (GetVolumeInformationA(drivePath, volName, MAX_LEN, NULL, compLength, fileFlags, fileSystem, MAX_LEN)){
  60.             printf("Имя тома - %s\n", volName);
  61.             printf("Файловая система - %s\n", fileSystem);
  62.             printf("Максимальная длина компонента имени файла - %ld\n", *compLength);
  63.             if (*fileFlags & FILE_CASE_PRESERVED_NAMES)
  64.                 printf("Поддерживает сохранение регистра имен файлов при хранении\n");
  65.             if (*fileFlags & FILE_CASE_SENSITIVE_SEARCH)
  66.                 printf("Поддерживает поиск, чувствительный к регистру\n");
  67.             if (*fileFlags & FILE_FILE_COMPRESSION)
  68.                 printf("Поддерживает сжатие файлов\n");
  69.             if (*fileFlags & FILE_NAMED_STREAMS)
  70.                 printf("Поддерживает именованные потоки\n");
  71.             if (*fileFlags & FILE_PERSISTENT_ACLS)
  72.                 printf("Сохраняет и обеспечивает соблюдение ACL\n");
  73.             if (*fileFlags & FILE_READ_ONLY_VOLUME)
  74.                 printf("Только для чтения\n");
  75.             if (*fileFlags & FILE_SEQUENTIAL_WRITE_ONCE)
  76.                 printf("Поддерживает одиночную последовательную запись\n");
  77.             if (*fileFlags & FILE_SUPPORTS_ENCRYPTION)
  78.                 printf("Поддерживает шифрование\n");
  79.             if (*fileFlags & FILE_SUPPORTS_EXTENDED_ATTRIBUTES)
  80.                 printf("Поддерживает расширенные атрибуты\n");
  81.             if (*fileFlags & FILE_SUPPORTS_HARD_LINKS)
  82.                 printf("Поддерживает жесткие ссылки\n");
  83.             if (*fileFlags & FILE_SUPPORTS_OBJECT_IDS)
  84.                 printf("Поддерживает идентификаторы объектов\n");
  85.             if (*fileFlags & FILE_SUPPORTS_OPEN_BY_FILE_ID)
  86.                 printf("Поддерживает открытие по FileID\n");
  87.             if (*fileFlags & FILE_SUPPORTS_REPARSE_POINTS)
  88.                 printf("Поддерживает точки повторной обработки\n");
  89.             if (*fileFlags & FILE_SUPPORTS_SPARSE_FILES)
  90.                 printf("Поддерживает разреженные файлы\n");
  91.             if (*fileFlags & FILE_SUPPORTS_TRANSACTIONS)
  92.                 printf("Поддерживает транзакции\n");
  93.             if (*fileFlags & FILE_SUPPORTS_USN_JOURNAL)
  94.                 printf("Поддерживает журнал USN\n");
  95.             if (*fileFlags & FILE_UNICODE_ON_DISK)
  96.                 printf("Поддерживает Unicode в именах файлов\n");
  97.             if (*fileFlags & FILE_VOLUME_IS_COMPRESSED)
  98.                 printf("Том сжат\n");
  99.             if (*fileFlags & FILE_VOLUME_QUOTAS)
  100.                 printf("Поддерживает квоты\n");
  101.         }
  102.         else {
  103.             DWORD err = GetLastError();
  104.             printf("Ошибка получения информации о диске: код %ld", err);
  105.         }
  106.         free(volName);
  107.         free(compLength);
  108.         free(fileFlags);
  109.         free(fileSystem);
  110.        
  111.         PULARGE_INTEGER freeSpace = (PULARGE_INTEGER)malloc(sizeof *freeSpace);
  112.         PULARGE_INTEGER totalSpace = (PULARGE_INTEGER)malloc(sizeof *totalSpace);
  113.         if (GetDiskFreeSpaceExA(drivePath, freeSpace, totalSpace, NULL)) {
  114.             printf("Свободное место на диске - %I64u из %I64u байт\n", freeSpace->QuadPart, totalSpace->QuadPart);
  115.         }
  116.         else {
  117.             DWORD err = GetLastError();
  118.             printf("Ошибка при получении информации о свободном месте: код %ld", err);
  119.         }
  120.         free(freeSpace);
  121.         free(totalSpace);
  122.     }
  123.     else {
  124.         fflush(stdin);
  125.         printf("Ошибка при считывании ввода");
  126.     }    
  127.        
  128. }
  129.  
  130. void dirCreateDelete() {
  131.     int flag = 1;
  132.     do {
  133.         printf("1 - Создание каталога\n2 - Удаление каталога\n3 - Возврат в меню\n");
  134.         char c = getchar();
  135.         fflush(stdin);
  136.         char dirPath[MAX_LEN];
  137.         switch (c) {
  138.             case '1':
  139.                 printf("Введите путь к создаваемому каталогу\nНапример: \"C:\\Tools\\NewDir\" \".\\NewDir\" (создает в текущем каталоге)\n");
  140.                 if (fgets(dirPath, MAX_LEN, stdin)){
  141.                     fflush(stdin);
  142.                     dirPath[strlen(dirPath) - 1] = '\0';
  143.                     if(!CreateDirectory(dirPath, NULL)) {
  144.                         DWORD err = GetLastError();
  145.                         if (err == ERROR_ALREADY_EXISTS)
  146.                             printf("Ошибка: каталог уже существует\n");
  147.                         else if (err == ERROR_PATH_NOT_FOUND)
  148.                             printf("Ошибка: путь к каталогу не существует\n");
  149.                         else
  150.                             printf("Ошибка: код ошибки %ld\n", err);
  151.                     }
  152.                     else
  153.                         printf ("Каталог создан\n");
  154.                 }
  155.                 else {
  156.                     fflush(stdin);
  157.                     printf("Ошибка при считывании ввода");
  158.                 }
  159.                 break;
  160.             case '2':
  161.                 printf("Введите путь к удаляемому каталогу\nНапример: \"C:\\Tools\\Dir\" \".\\Dir\" (удаляет в текущем каталоге)\n");
  162.                 if (fgets(dirPath, MAX_LEN, stdin)){
  163.                     fflush(stdin);
  164.                     dirPath[strlen(dirPath) - 1] = '\0';
  165.                     if (!RemoveDirectory(dirPath)) {
  166.                         DWORD err = GetLastError();
  167.                         printf("Ошибка: код ошибки %ld\n", err);
  168.                     }
  169.                     else
  170.                         printf("Каталог удален\n");
  171.                 }
  172.                 else {
  173.                     fflush(stdin);
  174.                     printf("Ошибка при считывании ввода");
  175.                 }
  176.                 break;
  177.             case '3':
  178.                 printf("Возвращаемся в меню\n");
  179.                 flag = 0;
  180.                 break;
  181.             default:
  182.                 printf("Ошибка ввода, попробуйте еще раз\n");
  183.         }
  184.     } while (flag);
  185.                
  186. }
  187.  
  188. void fileCreate() {
  189.     printf("Введите путь к создаваемому файлу\nНапример: \"C:\\Tools\\NewFile\" \".\\NewFile\" (в текущем каталоге)\n");
  190.     char filePath[MAX_LEN];
  191.     if (fgets(filePath, MAX_LEN, stdin)){
  192.         fflush(stdin);
  193.         filePath[strlen(filePath) - 1] = '\0';
  194.         SECURITY_ATTRIBUTES secAttr = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE };
  195.         HANDLE fileHandle = CreateFile(filePath, GENERIC_READ | GENERIC_WRITE, 0, &secAttr, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
  196.         if (fileHandle == INVALID_HANDLE_VALUE) {
  197.             DWORD err = GetLastError();
  198.             if (err == ERROR_FILE_EXISTS)
  199.                 printf("Ошибка: файл уже существует\n");
  200.             else if (err == ERROR_PATH_NOT_FOUND)
  201.                 printf("Ошибка: путь к файлу не существует\n");
  202.             else
  203.                 printf("Ошибка: код ошибки %ld\n", err);
  204.         }
  205.         else {
  206.             printf("Файл создан\n");
  207.             CloseHandle(fileHandle);
  208.         }
  209.     }
  210.     else {
  211.         fflush(stdin);
  212.         printf("Ошибка при считывании ввода");
  213.     }
  214. }
  215.  
  216. void fileCopyMove() {
  217.     int flag = 1;
  218.     do {
  219.         printf("1 - Копирование файла\n2 - Перемещение файла\n3 - Возврат в меню\n");
  220.         char c = getchar();
  221.         fflush(stdin);
  222.         char exFilePath[MAX_LEN];
  223.         char newFilePath[MAX_LEN];
  224.         switch (c) {
  225.             case '1':
  226.                 printf("Введите путь к копируемому файлу\nНапример: \"C:\\Tools\\File\" \".\\File\" (в текущем каталоге)\n");
  227.                 if (fgets(exFilePath, MAX_LEN, stdin)){
  228.                     fflush(stdin);
  229.                     exFilePath[strlen(exFilePath) - 1] = '\0';
  230.                     printf("Введите путь к новому файлу\nНапример: \"C:\\Tools\\NewFile\" \".\\NewFile\" (в текущем каталоге)\n");
  231.                     if (fgets(newFilePath, MAX_LEN, stdin)) {
  232.                         fflush(stdin);
  233.                         newFilePath[strlen(newFilePath) - 1] = '\0';
  234.                         if (!CopyFile(exFilePath, newFilePath, TRUE)){
  235.                             DWORD err = GetLastError();
  236.                             if (err == ERROR_FILE_EXISTS) {
  237.                                 printf("Файл с таким именем уже существует. Перезаписать его?\n1 - да, 2 - нет\n");
  238.                                 char c1 = getchar();
  239.                                 fflush(stdin);
  240.                                 int flag1 = 1;
  241.                                 do {
  242.                                     switch(c1) {
  243.                                         case '1':
  244.                                             CopyFile(exFilePath, newFilePath, FALSE);
  245.                                             printf("Файл перезаписан\n");
  246.                                             flag1 = 0;
  247.                                             break;
  248.                                         case '2':
  249.                                             printf("Отмена копирования\n");
  250.                                             flag1 = 0;
  251.                                             break;
  252.                                         default:
  253.                                             printf("Ошибка ввода, попробуйте еще раз\n");
  254.                                     }
  255.                                 } while (flag1);
  256.                             }
  257.                             else if (err == ERROR_PATH_NOT_FOUND)
  258.                                 printf("Ошибка: путь к файлу не существует\n");
  259.                             else if (err == ERROR_FILE_NOT_FOUND)
  260.                                 printf("Ошибка: исходный файл не существует\n");
  261.                             else
  262.                                 printf("Ошибка: код ошибки: %ld\n", err);
  263.                         }
  264.                         else
  265.                             printf("Файл скопирован\n");                            
  266.                     }
  267.                     else {
  268.                         fflush(stdin);
  269.                         printf("Ошибка при считывании ввода");
  270.                     }
  271.                 }
  272.                 else {
  273.                     fflush(stdin);
  274.                     printf("Ошибка при считывании ввода");
  275.                 }
  276.                 break;
  277.             case '2':
  278.                 printf("Введите путь к перемещаемому файлу или директории\nНапример: \"C:\\Tools\\File\" \".\\File\" (в текущем каталоге)\n");
  279.                 if (fgets(exFilePath, MAX_LEN, stdin)){
  280.                     fflush(stdin);
  281.                     exFilePath[strlen(exFilePath) - 1] = '\0';
  282.                     printf("Введите путь к новому файлу или директории\nНапример: \"C:\\Tools\\NewFile\" \".\\NewFile\" (в текущем каталоге)\n");
  283.                     if (fgets(newFilePath, MAX_LEN, stdin)) {
  284.                         fflush(stdin);
  285.                         newFilePath[strlen(newFilePath) - 1] = '\0';
  286.                         if (!MoveFile(exFilePath, newFilePath)){
  287.                             DWORD err = GetLastError();
  288.                             if (err == ERROR_ALREADY_EXISTS) {
  289.                                 printf("Файл/директория с таким именем уже существует. Перезаписать его?\n1 - да, 2 - нет\n");
  290.                                 char c1 = getchar();
  291.                                 fflush(stdin);
  292.                                 int flag1 = 1;
  293.                                 do {
  294.                                     switch(c1) {
  295.                                         case '1':
  296.                                             MoveFileEx(exFilePath, newFilePath, MOVEFILE_REPLACE_EXISTING);
  297.                                             printf("Файл/директория перезаписан(-а)\n");
  298.                                             flag1 = 0;
  299.                                             break;
  300.                                         case '2':
  301.                                             printf("Отмена перемещения\n");
  302.                                             flag1 = 0;
  303.                                             break;
  304.                                         default:
  305.                                             printf("Ошибка ввода, попробуйте еще раз\n");
  306.                                     }
  307.                                 } while (flag1);
  308.                             }
  309.                             else if (err == ERROR_PATH_NOT_FOUND)
  310.                                 printf("Ошибка: путь к файлу не существует\n");
  311.                             else if (err == ERROR_FILE_NOT_FOUND)
  312.                                 printf("Ошибка: исходный файл не существует\n");
  313.                             else
  314.                                 printf("Ошибка: код ошибки: %ld\n", err);
  315.                         }
  316.                         else
  317.                             printf("Файл/директория перемещен(-а)\n");                            
  318.                     }
  319.                     else {
  320.                         fflush(stdin);
  321.                         printf("Ошибка при считывании ввода");
  322.                     }
  323.                 }
  324.                 else {
  325.                     fflush(stdin);
  326.                     printf("Ошибка при считывании ввода");
  327.                 }
  328.                 break;
  329.             case '3':
  330.                 printf("Возвращаемся в меню\n");
  331.                 flag = 0;
  332.                 break;
  333.             default:
  334.                 printf("Ошибка ввода, попробуйте еще раз\n");
  335.         }
  336.     } while (flag);
  337.                
  338. }
  339.  
  340. void fileAttr() {
  341.     printf("Введите путь к файлу, о котором хотите получить информацию\nНапример: \"C:\\Tools\\File\" \".\\File\" (в текущем каталоге)\n");
  342.     char filePath[MAX_LEN];
  343.     if (fgets(filePath, MAX_LEN, stdin)){
  344.         fflush(stdin);
  345.         filePath[strlen(filePath) - 1] = '\0';
  346.         DWORD fileAttr = GetFileAttributesA(filePath);
  347.         if (fileAttr == INVALID_FILE_ATTRIBUTES) {
  348.             DWORD err = GetLastError();
  349.             if (err == ERROR_FILE_NOT_FOUND)
  350.                 printf("Ошибка: файл не существует\n");
  351.             else if (err == ERROR_PATH_NOT_FOUND)
  352.                 printf("Ошибка: путь к файлу не существует\n");
  353.             else
  354.                 printf("Ошибка: код ошибки %ld\n", err);
  355.         }
  356.         else if (fileAttr == FILE_ATTRIBUTE_NORMAL) {
  357.             printf("Файл не имеет особых атрибутов\n");
  358.         }
  359.         else {
  360.             if (fileAttr & FILE_ATTRIBUTE_ARCHIVE)
  361.                 printf("Архивный файл\n");
  362.             if (fileAttr & FILE_ATTRIBUTE_HIDDEN)
  363.                 printf("Скрытый файл\n");
  364.             if (fileAttr & FILE_ATTRIBUTE_NOT_CONTENT_INDEXED)
  365.                 printf("Файл не индексируется\n");
  366.             if (fileAttr & FILE_ATTRIBUTE_OFFLINE)
  367.                 printf("Оффлайн файл\n");
  368.             if (fileAttr & FILE_ATTRIBUTE_READONLY)
  369.                 printf("Файл только для чтения\n");
  370.             if (fileAttr & FILE_ATTRIBUTE_SYSTEM)
  371.                 printf("Системный файл\n");
  372.             if (fileAttr & FILE_ATTRIBUTE_TEMPORARY)
  373.                 printf("Временный файл\n");
  374.         }
  375.        
  376.         HANDLE fileHandle = CreateFile(filePath, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  377.         if (fileHandle == INVALID_HANDLE_VALUE) {
  378.             DWORD err = GetLastError();
  379.             if (err == ERROR_FILE_NOT_FOUND)
  380.                 printf("Ошибка: файл не существует\n");
  381.             else if (err == ERROR_PATH_NOT_FOUND)
  382.                 printf("Ошибка: путь к файлу не существует\n");
  383.             else
  384.                 printf("Ошибка: код ошибки %ld\n", err);
  385.         }
  386.         else {
  387.             LPFILETIME createTime = (LPFILETIME)malloc(sizeof *createTime);
  388.             LPFILETIME lastAccTime = (LPFILETIME)malloc(sizeof *lastAccTime);
  389.             LPFILETIME lastWriteTime = (LPFILETIME)malloc(sizeof *lastWriteTime);
  390.             if (!GetFileTime(fileHandle, createTime, lastAccTime, lastWriteTime))
  391.                 printf("Ошибка: код ошибки %ld\n", GetLastError());
  392.             else {
  393.                 LPSYSTEMTIME sysTime = (LPSYSTEMTIME)malloc(sizeof *sysTime);
  394.                 if (!FileTimeToSystemTime(createTime, sysTime))
  395.                     printf("Ошибка: код ошибки %ld\n", GetLastError());
  396.                 else
  397.                     printf("Дата создания файла: %d/%d/%d %d:%d:%d\n", sysTime->wYear, sysTime->wMonth, sysTime->wDay, sysTime->wHour, sysTime->wMinute, sysTime->wSecond);
  398.                 if (!FileTimeToSystemTime(lastAccTime, sysTime))
  399.                     printf("Ошибка: код ошибки %ld\n", GetLastError());
  400.                 else
  401.                     printf("Дата последнего доступа к файлу: %d/%d/%d %d:%d:%d\n", sysTime->wYear, sysTime->wMonth, sysTime->wDay, sysTime->wHour, sysTime->wMinute, sysTime->wSecond);
  402.                 if (!FileTimeToSystemTime(lastWriteTime, sysTime))
  403.                     printf("Ошибка: код ошибки %ld\n", GetLastError());
  404.                 else
  405.                     printf("Дата изменения файла: %d/%d/%d %d:%d:%d\n", sysTime->wYear, sysTime->wMonth, sysTime->wDay, sysTime->wHour, sysTime->wMinute, sysTime->wSecond);
  406.                 free(sysTime);
  407.             }
  408.             free(createTime);
  409.             free(lastAccTime);
  410.             free(lastWriteTime);
  411.             CloseHandle(fileHandle);
  412.        
  413.             printf("Введите (через пробел) номера атрибутов, которые хотите добавить к файлу (или убрать, если он уже есть у файла):\n"
  414.                     "1 - архивный файл, 2 - скрытый файл, 3 - неиндексируемый файл, 4 - оффлайн файл, 5 - файл только для чтения, 6 - системный файл, 7 - временный файл\n");
  415.             char numbers[MAX_LEN];
  416.             if (fgets(numbers, MAX_LEN, stdin)) {
  417.                 fflush(stdin);
  418.                 numbers[strlen(numbers) - 1] = '\0';
  419.                 const int attr[8] = { 0, FILE_ATTRIBUTE_ARCHIVE, FILE_ATTRIBUTE_HIDDEN, FILE_ATTRIBUTE_NOT_CONTENT_INDEXED, FILE_ATTRIBUTE_OFFLINE,
  420.                                          FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_SYSTEM, FILE_ATTRIBUTE_TEMPORARY };
  421.                 for (int i = 0; numbers[i]; ++i) {
  422.                     if ((numbers[i] <= '7') && (numbers[i] >= '1')){
  423.                         if (attr[numbers[i] - '0'] & fileAttr)
  424.                             fileAttr = fileAttr & (~attr[numbers[i] - '0']);
  425.                         else
  426.                             fileAttr = fileAttr | attr[numbers[i] - '0'];
  427.                     }
  428.                 }
  429.                 SetFileAttributesA(filePath, fileAttr);  
  430.             }
  431.             else {
  432.                 fflush(stdin);
  433.                 printf("Ошибка при считывании ввода");
  434.             }
  435.             fileHandle = CreateFile(filePath, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  436.             LPSYSTEMTIME sysTime = (LPSYSTEMTIME)malloc(sizeof *sysTime);
  437.             GetSystemTime(sysTime);
  438.             LPFILETIME fileTime = (LPFILETIME)malloc(sizeof *fileTime);
  439.             SystemTimeToFileTime(sysTime, fileTime);
  440.             if(!SetFileTime(fileHandle, fileTime, fileTime, fileTime))
  441.                 printf("Ошибка: код ошибки %ld\n", GetLastError());
  442.             CloseHandle(fileHandle);
  443.             free(fileTime);
  444.             free(sysTime);
  445.         }
  446.     }
  447.     else {
  448.         fflush(stdin);
  449.         printf("Ошибка при считывании ввода");
  450.     }
  451. }
  452.  
  453. int main()
  454. {
  455.     int flag = 1;
  456.     system("chcp 65001");
  457.     do {
  458.         printf("Добро пожаловать! Выберите действие:\n1 - Вывод списка дисков\n2 - Информация о выбранном диске\n"
  459.             "3 - Создание и удаление каталогов\n4 - Создание файлов в новых каталогах\n"
  460.             "5 - Копирование и перемещение файлов между каталогами\n6 - Анализ и изменение атрибутов файлов\n7 - Выход\n");
  461.         char c = getchar();
  462.         fflush(stdin);
  463.         switch (c){
  464.             case '1':
  465.                 getDrives();
  466.                 break;
  467.             case '2':
  468.                 getDriveInfo();
  469.                 break;
  470.             case '3':
  471.                 dirCreateDelete();
  472.                 break;
  473.             case '4':
  474.                 fileCreate();
  475.                 break;
  476.             case '5':
  477.                 fileCopyMove();
  478.                 break;
  479.             case '6':
  480.                 fileAttr();
  481.                 break;
  482.             case '7':
  483.                 printf("Выход из программы\n");
  484.                 flag = 0;
  485.                 break;
  486.             default:
  487.                 printf("Неправильный ввод, попробуйте еще раз\n");
  488.         }
  489.              
  490.     } while (flag);
  491.     return 0;
  492. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top