Итак, я занимался классами на C, и одним из упражнений было программирование программы шифрования цезаря, которая шифрует и расшифровывает. И когда вход «ab cd», выход должен быть «de # fg», но вместо этого он выводит «de? G?». Поэтому я предполагаю, что пробел все в порядке. Но также была обнаружена еще одна ошибка, когда я ввел «a» и вывел «d? Ad?». Заранее спасибо.C Caesar Cipher error random string output
#include <stdio.h>
#include <string.h>
void cipher(char plain_str[], char cipher_str[]);
void decipher(char cipher_str[], char decipher_str[]);
int main() {
char plain_str[30];
char cipher_str[30];
char decipher_str[30];
printf("Enter plain string: ");
scanf("%s", plain_str);
cipher(plain_str, cipher_str);
decipher(cipher_str, decipher_str);
}
void cipher(char plain_str[], char cipher_str[]) {
int i = 0;
while(plain_str[i] != '\0') {
if((plain_str[i]+3) >= 0 && (plain_str[i]+3) <= 127) {
cipher_str[i] = plain_str[i] + 3;
} else {
cipher_str[i] = plain_str[i] - 124;
}
i++;
}
printf("%s\n", cipher_str);
}
void decipher(char cipher_str[], char decipher_str[]) {
//asdf
}
Вы никогда не добавляя завершающий нулевой байт в 'cipher_str'. – Barmar
Извините, я не понимаю, мои знания программирования C заканчиваются на петлях ... – user1885723
Вы принимаете класс C, и они никогда не учили вас, что строки C должны заканчиваться символом '\ 0'? Разве это не значит, что цикл while? – Barmar