C++ c++;正在跳过for循环
这个小程序我做错了什么 我刚刚开始学习C++,我的意思是,我可以接受这个问题。我通过PrATA+C++底漆阅读,它给我一个代码示例,它使用一个字符数组,在一个for循环中使用StrucMp(),它通过ASCII代码顺序地从'`'开始迭代,直到一个测试char变量=s,从另一个char中设置一个值。 考虑到我可以超越这本书,我尝试创建一个类似的程序,它采用一个字符数组,使用for循环将采用一个测试字符数组,并迭代数组的每个值,直到两个变量相等 我将程序简化为只获取for循环中每个数组的第一个,因为我遇到了一个问题,程序似乎只是跳过for循环并终止C++ c++;正在跳过for循环,c++,C++,这个小程序我做错了什么 我刚刚开始学习C++,我的意思是,我可以接受这个问题。我通过PrATA+C++底漆阅读,它给我一个代码示例,它使用一个字符数组,在一个for循环中使用StrucMp(),它通过ASCII代码顺序地从'`'开始迭代,直到一个测试char变量=s,从另一个char中设置一个值。 考虑到我可以超越这本书,我尝试创建一个类似的程序,它采用一个字符数组,使用for循环将采用一个测试字符数组,并迭代数组的每个值,直到两个变量相等 我将程序简化为只获取for循环中每个数组的第一个,因为
下面首先是prata代码片段,然后是我的一段代码。任何反馈(即使是辱骂)的
for
循环都不会启动,因为您的情况如下所示:
word[0] == test[0] || temp == 'z'
第一次通过时将始终返回false。由于temp
被初始化为?”
,并且word[0]
(w
)不等于test[0]
(?
),因此循环将永远不会启动
另外,您已经将temp
初始化为?
,因此,您将看到?
和小写z
之间有许多非字母字符
此外,在for
循环中,您可以增加j
(j++
),但永远不要触摸i
。因为您是从word
读取char
的,而i
是您的索引,test
最终将是“www>”
你似乎把自己搞糊涂了,所以
让我们把你想做的事情分解一下:
如果迭代字符串中的每个字符,然后在索引处检查字母表中的每个字母,将有两个循环:
for(;;) {
for(;;) {
}
}
第一个(遍历字符串中的每个索引应在索引到达字符串末尾时结束(字符串文本以'\0'
结尾):
第二个将检查字母表中的每个字母(char temp='a'
和temp++
)与word
和test
(word[i]!=test[i];
)。如果它们不相等,它会将索引i
处的test
字符设置为temp
,直到找到正确的字母。将所有字符放在一起,您将得到以下结果:
for(int i = 0; word[i] != '\0' && test[i] != '\0'; i++) {
for(char temp = 'a'; word[i] != test[i]; temp++) {
test[i] = temp;
}
}
当然,如果您只追求结果,而不尝试自学循环和编程基础知识,那么这只是simplay调用的一种非常迂回的方式:
memcpy(temp, word, strlen(word));
您的for
循环永远不会启动,因为您的条件如下所示:
word[0] == test[0] || temp == 'z'
第一次通过时将始终返回false。由于temp
被初始化为?”
,并且word[0]
(w
)不等于test[0]
(?
),因此循环将永远不会启动
另外,您已经将temp
初始化为?
,因此,您将看到?
和小写z
之间有许多非字母字符
此外,在for
循环中,您可以增加j
(j++
),但永远不要触摸i
。因为您是从word
读取char
的,而i
是您的索引,test
最终将是“www>”
你似乎把自己搞糊涂了,所以
让我们把你想做的事情分解一下:
如果迭代字符串中的每个字符,然后在索引处检查字母表中的每个字母,将有两个循环:
for(;;) {
for(;;) {
}
}
第一个(遍历字符串中的每个索引应在索引到达字符串末尾时结束(字符串文本以'\0'
结尾):
第二个将检查字母表中的每个字母(char temp='a'
和temp++
)与word
和test
(word[i]!=test[i];
)。如果它们不相等,它会将索引i
处的test
字符设置为temp
,直到找到正确的字母。将所有字符放在一起,您将得到以下结果:
for(int i = 0; word[i] != '\0' && test[i] != '\0'; i++) {
for(char temp = 'a'; word[i] != test[i]; temp++) {
test[i] = temp;
}
}
当然,如果您只追求结果,而不尝试自学循环和编程基础知识,那么这只是simplay调用的一种非常迂回的方式:
memcpy(temp, word, strlen(word));
它看起来像是word[0]==test[0]| | temp='z'
在第一次计算时将是false
。好的,当for
循环第一次执行时,word[0]='w'
,test[0]=='?'
和temp=='?'
。因此控制表达式为false。另一个注意事项:您将temp增加了两次:在for表达式和for循环体中。没有理由使用i作为word的索引,而使用j作为temp的索引。它们应该使用相同的一个。实际上,您从未增加过i。看起来像word[0]==test[0]| | temp='z'
在第一次求值时将为false
。好的,当第一次执行for
循环时,word[0]='w'
,test[0]=='?'
和temp=='?'
。因此控制表达式为false。另一个注意事项:您将temp增加两次:在for表达式和for循环体中。没有理由使用i作为word的索引,而使用j作为temp的索引。它们都应该使用相同的一个。事实上,您从未增加过i。噢…Duh:/谢谢。我是新来的到这个网站,我很感谢你的回答。现在转到阵列的其他部分。顺便说一句。天哪,这是一个比我想象的要好得多的答案。我真的很感激。我的目标是了解for循环和混乱