Найти конец символов в строке - PullRequest
0 голосов
/ 28 ноября 2018

Я пишу шифр Цезаря, который сдвигает значение каждого символа в массиве на заданную величину.У меня проблема в том, что значения символов после моей строки также сдвигаются. Я надеюсь полностью игнорировать эти значения / не печатать их.

У меня есть следующее, которое компилируется ниже, но я не могу думать о том, как также не анализировать конечные символы.Моя функция шифрования должна принимать эти точные параметры, поэтому я также не могу передать ей длину.

#include <stdio.h>

void encrypt(char *message, int shift);

int main(void)
{
    int shift_amount;
    int length;
    char message[80];
    char c;

    printf("Enter message to be encrypted: ");
    for (length = 0; ( c = getchar()) != '\n'; length++) {
        message[length] = c;
    }

    printf("Enter shift amount (1-25): ");
    scanf("%d", &shift_amount);

    encrypt(message, 3);

    return 0;
}

void encrypt(char *message, int shift){
    printf("Encrypted message: ");
    for (int i = 0; i < 80; i++) {
        char ch = message[i];

        if (message[i] >= 'a' && message[i] <= 'z') {
            ch = (( ch - 'a' ) + shift) % 26 + 'a';
        } else if (message[i] >= 'A' && message[i] <= 'Z') {
            ch = (( ch - 'A' ) + shift) % 26 + 'A';
        }
        printf("%c", ch);
    }
    printf("\n");
}

Желаемый пример ввода / вывода будет:

вход: "Давай, сделай мой день."со смещением 3

вывод: "Jr dkhdg, pdnh pb gdb."

Спасибо!

1 Ответ

0 голосов
/ 28 ноября 2018

Вместо изменения ровно 80 символов, просто остановитесь, когда достигнете конца строки.Как вы говорите, когда конец строки?Потому что первый символ после конца строки будет символом конца строки, т.е. '\0'.

. В вашем коде вы можете сделать это, заменив условие for с i<80 на message[i] != '\0'.или используя оба условия, если вы также хотите указать максимальную длину, просто чтобы быть уверенным.

Как я понимаю, теперь ваша строка вообще не имеет терминатора.Вы должны поставить один, когда вы читаете символы из консоли:

printf("Enter message to be encrypted: ");
for (length = 0; ( c = getchar()) != '\n'; length++) {
    message[length] = c;
}
message[length] = '\0'; // <- add this here 
...