gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 00:38:29 25 4
gpt4 key购买 nike

下面的代码应该使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com