Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;正在跳过for循环_C++ - Fatal编程技术网

C++ c++;正在跳过for循环

C++ c++;正在跳过for循环,c++,C++,这个小程序我做错了什么 我刚刚开始学习C++,我的意思是,我可以接受这个问题。我通过PrATA+C++底漆阅读,它给我一个代码示例,它使用一个字符数组,在一个for循环中使用StrucMp(),它通过ASCII代码顺序地从'`'开始迭代,直到一个测试char变量=s,从另一个char中设置一个值。 考虑到我可以超越这本书,我尝试创建一个类似的程序,它采用一个字符数组,使用for循环将采用一个测试字符数组,并迭代数组的每个值,直到两个变量相等 我将程序简化为只获取for循环中每个数组的第一个,因为

这个小程序我做错了什么

我刚刚开始学习C++,我的意思是,我可以接受这个问题。我通过PrATA+C++底漆阅读,它给我一个代码示例,它使用一个字符数组,在一个for循环中使用StrucMp(),它通过ASCII代码顺序地从'`'开始迭代,直到一个测试char变量=s,从另一个char中设置一个值。 考虑到我可以超越这本书,我尝试创建一个类似的程序,它采用一个字符数组,使用for循环将采用一个测试字符数组,并迭代数组的每个值,直到两个变量相等

我将程序简化为只获取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循环和混乱