c - 动态创建变量时 [i] 的未声明标识符

标签 c encryption

下面的代码应该使用 ceasers 密码来加密一个句子,它仍然是 WIP,我没有考虑空格、小写字母等。

int main(int argc,string argv[])
{
    int k = atoi(argv[1]);
    string value = GetString();
    int n = strlen(value);

    for(int i = 0;i<n; i++);
    {
        char temp = value[i];
        int conv = temp - (int)'A';
        int cipher = (conv + k)%26;
        char final = cipher + (int)'A'; 

        printf("%c\n",final); 
    } 
}

我明白了

caeser.c:15:23 use of undeclared identifier i. 

char temp = value[i]; 行上

最佳答案

删除 for 行末尾的分号:

for(int i = 0;i<n; i++);

在那里声明 int i 使其成为 for block 的本地,但由于分号是一个空 block 。

所以在下面的代码块中({ }之间)i没有声明,因为它不属于for

这也将修复程序不会多次执行 for 的主体(如果编译的话它会执行)。如果这已经编译,for 循环将一直循环到 n 但不会执行任何内容。然后,花括号之间的代码将使用 i == n 执行(假设 i 然后对该代码块可见)。因此,您的代码将始终以 temp == '\0'(value 中的终止 null)执行,并始终打印相同的密码值。

ENCORE:(如评论中所述,但出于完整性考虑)

将字 rune 字转换为 int (int conv = temp - (int)'A';) 是不必要的,原因有两个:

  1. 与看似直观的字 rune 字相反,字 rune 字是 int,而不是 char(我相信这在 C++ 中是不同的)
  2. 但即使 1. 不是这种情况,char 总是比 int 小,因此总是适合 int > 这样它就可以安全地得到推广。

关于c - 动态创建变量时 [i] 的未声明标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19696241/

相关文章:

git - 将加密的 csv 导入 Python 3

java - 有没有办法解密S/MIME公钥数据?

c - 写入n个字节并读取n个字节: sending number of bytes to read using uint16_t

C 函数声明

c - 在 C 中拥有多个子进程的最佳方法是什么

c - 分解大数据以进行 RSA 加密

javascript - 为 AES-CTR 模式正确使用随机数和计数器

email - APOP和POP之间的区别

创建一个简单的字符串结构

c++ - 为什么int指针 '++'增加4而不是1?