-1

所以在我完全学会了 C 之后,我会制作一个程序,将用户的密码保存在他们的计算机(本地)中,但是在本地保存密码是危险的,因为知道密码保存在哪里的人可以很容易地得到密码绑定编码一个用特定字母替换每个字母的编码器。(示例:'a' 变成 '1')所以我在 ideone.com 上尝试了代码:(因为我不在电脑附近,而是在智能手机附近)

#include <stdio.h>

int main() {
    char input;

    scanf("%c", &input);
    encode(input);
    printf("%c", input);

    return 0;
}

void encode(char input) {
    char a = 'a';
    char A = 'A';

    a = '1';
    A = '2';
}

如果我输入“aA”,它应该显示为“12”,但当然它只显示一个“a”,因为 char 只将第一个单词保存到变量中。我确实尝试在 char 之后使用 [10] 但我得到了错误,没有它它只会显示一个没有被替换的“a”。请尽快回复我。

4

3 回答 3

2

你的方法有两个大问题。

  1. 不要使用 'void' 使用 'int' 作为 'encode' 返回类型。使用 for 循环将用户输入的所有值作为字符传递,并将返回的“int”值保存在“int”数组中。之后,您可以向用户显示密码已被编码或加密的数组。
  2. 您没有在编码函数的任何地方使用“字符输入”,因此没有任何更改。
于 2013-11-08T07:27:39.327 回答
2

您需要扫描一个字符数组(使用 %s 和一个字符数组),然后根据您的映射循环替换字符。像这样:

#include <stdio.h>

/* Note we pass a pointer here, which gives access to the array... */
void encode(char *input) 
{
    int i;

    /* Loop through until we hit the end-of-string character */
    for (i=0; input[i] != '\0'; i++)
    {
        switch (input[i])
        {
            case 'a':
                input[i] = '1';
                break;
            case 'A':
                input[i] = '2';
                break;

            /* Add more mappings here, as required... */

            default:
                break;
        }
    }
}

int main()
{
    /* Make sure this is big enough for your string... */
    char input[10];

    scanf("%s", input);
    encode(input);
    printf("%s", input);

    return 0;
}

请注意,此处的“切换”仅在您有一些特定映射时才有用。如果您想以更灵活的方式翻译字符,您可能需要对 char 的值进行某种数学运算 - 这取决于您!

于 2013-11-08T07:27:49.897 回答
1

你的encode方法根本没有效果。按值传递。这永远不会影响变量输入。它将显示给您的输入。

您必须发送字符变量的地址。阅读通过引用传递

于 2013-11-08T07:22:08.493 回答