字符串打印问题

时间:2016-11-27 11:21:57

标签: c arrays string for-loop printing

我正在尝试使用Ceasar的密码创建一个用于生成字符串的程序,如果您不熟悉Ceasar cypher,这是一种非常简单的加密方法,它使用输入字符串和可以选择的数字“n”进行操作由用户然后只是将整个字母移动n次。对于axample,如果n = 1则所有A都变为B,依此类推。该程序应该有一个输入字符串,应该由程序通过键盘输入读取,并且n号也必须由用户选择;并且应该返回一个字符串,其中第一个字符表示未加密字符串的第一个字符,然后后面的字符应该是输入字符串的加密版本,使用用户选择的n编号用Ceasar的密码加密。为了简洁起见,我没有在这篇文章中包含程序扫描n值并调整它的代码部分(显然必须小于26),并且我已经取消了程序中的部分将输入字符串改为大写。

int main() {
  int i, n;
  char uncod[200] = {0};
  char cod[200] = {0};
  printf("insert the string to encript:");
  scanf("%[0-9a-zA-ZSPACE]", uncod);
    cod[0] = (char)uncod[0];
    for(i == 1; i < 200; i++) {
      sprintf(cod, "%d + n", uncod[i]);
      if (cod[i] > 90) {
    cod[i] = 64 + n;
      }
      if (cod[i] < 65) {
    cod[i] = 91 + n;
    }
    };
     printf("%s\n", cod);
}

这个程序应该采用未加密字符串的ASCII码并加上或减去n来仅通过分配找到正确的字符,它只是通过数组运行并在分配给第一个字符后分配给每个字符他的加密对应部分输出字符串的值输入字符串的未加密的第一个字符。问题是,当我去打印输出字符串时,它只打印第一个字符而忽略其余字符。怎么解决这个?

2 个答案:

答案 0 :(得分:1)

  • n未在任何地方初始化。
  • 不确定这条线应该做什么“sprintf(cod,”%d + n“,uncod [i])”。为什么要将这样的字符串连接到加密输出?
  • 您可能希望在字符串终止时停止循环(\ 0)。

答案 1 :(得分:0)

您应该知道String只包含字符,并且在字符值中添加一些值后,它们的ASCII代码将不同 例如:如果您将在“A”的ASCII代码中添加50,则它将是65 + 50 = 135,并且字符将不同,并且某个时间值超过char的最大限制128。 并且字符串不会打印,因为字符串被转换为BYTE缓冲区;你要做什么? 使用unsigned char而不是char [limit将为0-255],你可以使用字节缓冲区 使用%d或使用%02X以十六进制打印整数字节缓冲区的值。 *以下是以十六进制格式打印BYTE缓冲区的代码段

for(loop=0; loop<5; loop++)
{
    printf("hexV[%d] : %02X\n",loop,hexV[loop]);
}

参考来自: C program to assign and copy hexadecimal values in character buffer.