【问题标题】:Issue with string printing字符串打印问题
【发布时间】:2016-11-27 11:21:56
【问题描述】:

我试图创建一个程序来用 Ceasar 的密码加密字符串,如果您不熟悉 Ceasar 密码,它是一种非常简单的加密方法,它使用输入字符串和可以选择的数字“n”进行操作由用户,然后将整个字母表移动 n 次。例如,如果 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 以通过简单的赋值来找到正确的字符,它只是遍历数组并在分配给第一个字符后将他的密码对应部分分配给每个字符输出字符串的值 输入字符串的未加密的第一个字符。问题是当我去打印输出字符串时,它只会打印第一个字符而忽略其余字符。如何解决?

【问题讨论】:

  • 一方面,for (i == 1... - 高度怀疑你的意思是逻辑等价比较。请尝试 assignment=。其次,迟早你会发现循环应该运行到 nullchar,而不是 200。
  • 哦,对不起……那是一个错字
  • 是的,如果发布的代码实际上是产生问题的代码,它会继续让我感到困惑。仍在努力解决这个问题。
  • 我在编码而不是在粘贴时打错了
  • 不确定这条线应该做什么"sprintf(cod, "%d + n", uncod[i])"。为什么要将这样的字符串连接到您的加密输出?

标签: c arrays string for-loop printing


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

【讨论】:

  • n 未初始化,因为为简洁起见,我没有发布扫描和调整 n 的代码部分。在程序中它被初始化并工作。
【解决方案2】:

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

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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多