为什么“f”和“g”ASCII字符在这段代码中变成负数?

问题描述

#include <stdio.h>

/*************** CAESAR CYPHER *****************

  -Take a charater array input
  -Loop through 26 character shifts
  -Print all possibilities
  
************************************************/

void Brute_Force(char *message)// Character array pointer
{
    char *i;// copy message for iteration: Stop at '/0'
    int j;// Iterate through the alphabet
    char t;//Temp variable for current letter
    
    for(j = 0; j < 26; j++)
    {   
        printf("\n----------Shift %i----------\n",j);//Aesthetics

        for(i = message; *i != '\0'; i++)
        {
            //Multiple of 26 to start at original message
            unsigned char t = ((*i + j)%26) + 104;
            
            // Only loop 97 to 122. ASCII 'a'-'z'
            if(t > 122){t = t - 26;}
            printf("%c",t);
        }
    }
}

int main()
{
    char mess[26] = "ynkooejcpdanqxeykjrbdofgkq";
    Brute_Force(mess);
    return 0;
}

在将 t 更改为 unsigned char 而不是常规的 char 之前,每次出现 'f'(102) 或 'g'(103) 时,它都会输出 { {1}} 而不是 t = -127/-128。我只是想知道是什么导致它变成负面的。仅适用于 'f' 和 'g',其他所有字母都是正确的。

示例输出为:

127/128

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)