(Решено) Попытка преобразовать целое число в символ - PullRequest
0 голосов
/ 05 августа 2020

Итак, я пытаюсь создать код, который будет работать как шифр. Слово будет использоваться для шифрования в качестве ввода и вывода (печати) кодированного слова. Проблема c моего кода - это для l oop.


#include <stdio.h>
#include <ctype.h>
#include <string.h>

int main(void)
{
   
        char input[] = "hello";
        printf("hello\n");
        printf("ciphertext: ");
        for (int i = 0; i < 5; i++)
        { 
            if(isalpha(input[i]))
            {
                int current = input[i];
                int cypher = ((current + 1) % 26 )+current;
                char out = (char)cypher;
                printf("%c", out);
            }
            else
            {
                printf("%c", input[i]);
            }

        }
        printf("\n");
        
}

Проблема, с которой я сталкиваюсь при отладке, заключается в том, что значение, которое в конечном итоге сохраняется в "out", кажется правильным, однако, когда дело доходит до его печати, он показывает совсем другое. Я действительно просмотрел довольно много вещей, которые нашел здесь, например, написал код как таковой:

char out = (char)cypher;
char out= cypher + '0';

и так далее, но безрезультатно. Вывод должен быть ifmmp, но я получаю j ~ rrx

Все, что угодно, поможет! спасибо :)

1 Ответ

0 голосов
/ 05 августа 2020

Вы получаете правильный ответ. 105 - это значение ASCII "i". Нет никакой разницы. Точнее, тип char определяется как целое число. Практически на всех компиляторах он имеет размер 8 бит. Таким образом, unsigned char может иметь значение от 0 до 255; знаковый char может иметь значение от -128 до + 127.

Итак, когда ваша out переменная имеет значение 105, она имеет значение 'i'.

Вывод вашего printf будет:

i

Но если вы посмотрите на переменную out в отладчике, вы можете увидеть 105, в зависимости от отладчика.

...