Не срабатывает gets - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый день, почему у меня в коде не срабатывает функция gets? Она просто пропускается. Заранее спасибо.
void keyinfile()
{
    char keyname[256];
    printf("\nType the name of key file with extension");
    gets_s(keyname);                           //не срабатывает
    FILE * ptr = fopen(keyname, "wb");
    for (int i = 0; key[i] != '\0'; i++)
        fprintf(ptr, "%c", key[i]);
    fclose(ptr);
}

Решение задачи: «Не срабатывает gets»

textual
Листинг программы
void code() {
    char ascii[255];  //здесь алфавит 224
    char key[520200]; //ключ
    char ascii2[130050]; //2 буквы
    char sentence[100000];
    char crypted[100000];
 
    for (int j = 0, i = 1; i < 256; i++, j++) {
        ascii[j] = i;
    }
 
    for (int i = 0, j = 0; i < 255; i++)
    {
        for (int d = 0; d < 255; d++, j++)
        {
            ascii2[j++] = ascii[i];
        }
    }
    for (int i = 0, j = 0; i < 255; i++)
    {
        for (int d = 0, i = 0; d < 255; d++, j++)
        {
            ascii2[++j] = ascii[i++];
        }
    }
 
    int j = 0;
    for (int i = 0; i < 520200; i++)
    {
        key[i++] = ascii2[j++];
        key[i++] = ascii2[j++];
        key[i] = 32;
        i = i + 3;
        key[i] = '\n';
        if (j == 130050)
        {
            j = 0;
        }
    }
 
    int r1, r2 = 0;
    char a;
    char tmp1, tmp2;
    for (int i = 0; i < 130050;)
    {
        r1 = rand() % 130050 + 0;
        r2 = rand() % 130050 + 0;
        if (!(r1 & 1) && !(r2 & 1)) {
            tmp1 = ascii2[r1];
            tmp2 = ascii2[++r1];
            ascii2[--r1] = ascii2[r2];
            ascii2[++r1] = ascii2[++r2];
            ascii2[--r2] = tmp1;
            ascii2[++r2] = tmp2;
            i++;
        }
 
    }
 
    j = 0;
    for (int i = 3; i < 520200; i = i + 4)
    {
        key[i++] = ascii2[j++];
        key[i++] = ascii2[j++];
 
    }
    char keyname[256];
    printf("\nType the name of key file with extension");
    gets_s(keyname, 256);
    FILE * ptr = fopen(keyname, "wb");
    for (int i = 0; key[i] != '\0'; i++)
        fprintf(ptr, "%c", key[i]);
    fclose(ptr);
 
    
        FILE *fp;
        char *p;
        int c;
        int s = 0;
        const char *filename = "sentence.txt";
        fp = fopen(filename, "r");
        for (p = sentence; p - sentence < 500 - 1 && (c = getc(fp)) != EOF; p++) {
            *p = c;
            s++;
        }
        if (c & 0)
        {
            sentence[--s] = '\0';
        }
        else
            *p = '\0';
        
    
    
        char x, y;
        int h = 0;
        for (int i = 0, j = 0; sentence[i] != '\0'; j = j + 6)
        {
        here:
            if (sentence[i] == key[j])
            {
                x = sentence[i];
                i++, j++;
                if (sentence[i] == key[j])
                {
                    y = sentence[i];
                    j = j + 2;
                    x = key[j++];
                    y = key[j];
                    crypted[h++] = x;
                    crypted[h++] = y;
                    j = 0;
                    i++;
 
                    crypted[h] = '\0';
                    goto here;
                }
                else
                    i--, j--;
            }
        }
 
        //printf("\nKey  : %s", key);
    
    
        FILE * pt = fopen("crypted.txt", "wb");
        for (int i = 0; crypted[i] != '\0'; i++)
            fprintf(pt, "%c", crypted[i]);
        fclose(pt);
    
}

Объяснение кода листинга программы

В этом коде используется язык программирования C. Здесь представлено краткое описание каждого элемента кода:

  1. Массивы:
    • ascii (строка из 255 символов) используется для хранения ASCII-кодов всех букв алфавита.
    • key (строка из 520200 символов) используется для хранения ключа, состоящего из двух букв.
    • ascii2 (строка из 130050 символов) используется для хранения расширенного ASCII-кода, состоящего из двух букв.
    • sentence (строка из 100000 символов) используется для хранения предложения, которое будет зашифровано.
    • crypted (строка из 100000 символов) используется для хранения зашифрованного предложения.
  2. Циклы:
    • Внешний цикл for (переменные j и i) используется для прохода по всем символам в массиве ascii.
    • Внутренний цикл for (переменные d и i) используется для прохода по всем символам в массиве ascii2.
    • Еще один внутренний цикл for (переменные d и i) используется для прохода по всем символам в массиве ascii2.
    • Цикл for (переменные i и j) используется для прохода по всем символам в массиве key.
    • Цикл for (переменные i и j) используется для прохода по всем символам в массиве ascii2.
    • Цикл for (переменные i и j) используется для прохода по всем символам в массиве crypted.
  3. Функции:
    • rand() используется для генерации случайных чисел.
    • printf() используется для вывода информации на консоль.
    • gets_s() используется для считывания строки с консоли.
    • fopen(), fclose(), getc() и fprintf() используются для работы с файлами.
  4. Операторы:
    • ++ и -- используются для инкремента и декремента указателей.
    • & используется для получения адреса символа.
    • == и != используются для сравнения символов.
    • << и >> используются для сдвига указателей.
    • * используется для разыменования указателей.
    • \\0 используется для обозначения конца строки.
  5. Переменные:
    • j и i используются в качестве счетчиков в циклах.
    • r1 и r2 используются для хранения случайно сгенерированных чисел.
    • tmp1 и tmp2 используются для временного хранения символов.
    • keyname используется для хранения имени файла ключа.
    • sentence используется для хранения предложения, которое будет зашифровано.
    • crypted используется для хранения зашифрованного предложения.
    • pt и fp используются для работы с файлами.
  6. Условные операторы:
    • if и else используются для проверки условий и выполнения соответствующих действий.
  7. Структуры данных:
    • В массивах используются динамические строки.
    • В циклах используются указатели для работы со строками.
  8. Комментарии:
    • Комментарии в коде обозначены символами // и #. Обратите внимание, что некоторые элементы кода могут быть не полностью описаны в данном списке, но основная структура и назначение каждого элемента должны быть понятны.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы