Шифр Цезаря в Си

Я пытаюсь сделать программу, которая получает массив символов в качестве входных данных, и каждая буква заменяется другой. В следующем коде я рассматриваю только одно изменение ('a' ->'h'), но как только программа сработает для этого изменения, я реализую другие (основанные, например, на Cesher Цезаря). Дело в том, что программа успешно компилируется, однако, когда я запускаю ее, если я вставляю "а", он возвращает другое "а" (и это должно было вернуть "ч"). Что не так с кодом? Заранее спасибо.

#include <stdio.h>

void ciphering (char text[])
{
    int i;

    for (i=0; i!='\0'; i++)
    {
         if (text[i]>='a' && text[i]<='z')
         {
                  if (text[i]=='a')
                      text[i]='h';
         }
    }
}

int main()
{
    char text[1000];

    scanf("%s", text);
    ciphering(text);
    printf("%s\n", text);
    return 0;
}

3 ответа

Ваш for цикл в функции имеет

for(i = 0; i != '\0'; ++i)
           ^^^^^^^^^

Измените это на:

for(i = 0; text[i] != '\0'; ++i)

потому что вы хотите проверить, когда text[i] имеет NUL персонаж.

0 а также '\0'в контексте вашего цикла for (и многих других контекстов) одинаковы.

for(i = 0; i != '\0'; ++i)

Я читаю это как: "для меня с нуля, в то время как он отличается от нуля...", что фактически означает, что цикл не будет работать ни разу.

Программа не входит в for() цикл, потому что условие продолжения ложно:

for (i = 0; i != '\0'; i ++) {

Что вам нужно проверить это i (индекс анализируемого символа) не указывает на нулевой символ. Эта строка должна читать:

for (i = 0; text[i] != '\0'; i ++) {
Другие вопросы по тегам