Шифр Цезаря в Си
Я пытаюсь сделать программу, которая получает массив символов в качестве входных данных, и каждая буква заменяется другой. В следующем коде я рассматриваю только одно изменение ('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 ++) {