C WHILE循环显示的输出与FOR循环不同
据我所知,C WHILE循环显示的输出与FOR循环不同,c,for-loop,while-loop,C,For Loop,While Loop,据我所知,for循环和while循环的区别如下: 用于: 首先进行初始化,然后检查条件表达式,如果结果为TRUE,则只执行语句部分。此循环是连续的,直到条件表达式结果为FALSE 而: 首先检查条件表达式,如果结果TRUE,则执行语句部分,否则不执行,此循环将持续,直到条件表达式结果FALSE 今天我写了一个算法,检查字符串是否有重复项,如果有,只打印那些没有重复项的: #include<stdio.h> #include<string.h> int main(voi
for
循环和while
循环的区别如下:
用于:
首先进行初始化,然后检查条件表达式,如果结果为TRUE
,则只执行语句部分。此循环是连续的,直到条件表达式结果为FALSE
而:
首先检查条件表达式,如果结果TRUE
,则执行语句部分,否则不执行,此循环将持续,直到条件表达式结果FALSE
今天我写了一个算法,检查
字符串是否有重复项,如果有,只打印那些没有重复项的:
#include<stdio.h>
#include<string.h>
int main(void){
const char *str = "Mississippi";
char tmp[15] = {0};
size_t i=0,j=0,k=1;
int found=0;
tmp[0] = str[0];
printf("Before = %s\n",str);
while(str[i] != '\0'){
for(j=0;tmp[j] != '\0';j++){
if(tmp[j] == str[i]){
found++;
}
}
if(found==0){
tmp[k]=str[i];
k++;
}
found=0;
i++;
}
tmp[strlen(tmp)] = '\0';
printf("After = %s\n",tmp);
return 0;
}
现在观察如果更换for
循环会发生什么:
for(j=0;tmp[j] != '\0';j++){
if(tmp[j] == str[i]){
found++;
}
}
使用“while”循环:
while(tmp[j] != '\0'){
if(tmp[j] == str[i]){
found++;
}
j++;
}
我得到:
#include<stdio.h>
#include<string.h>
int main(void){
const char *str = "Mississippi";
char tmp[15] = {0};
size_t i=0,j=0,k=1;
int found=0;
tmp[0] = str[0];
printf("Before = %s\n",str);
while(str[i] != '\0'){
while(tmp[j] != '\0'){
if(tmp[j] == str[i]){
found++;
}
j++;
}
if(found==0){
tmp[k]=str[i];
k++;
}
found=0;
i++;
}
tmp[strlen(tmp)] = '\0';
printf("After = %s\n",tmp);
return 0;
}
但是:
为什么会发生这种情况?因为while循环不会在最外层while循环的每次迭代中初始化j=0
因为while循环不会在最外层while循环的每次迭代中初始化j=0
注意,while
循环不会将j
初始化为0
删除j
到0
的初始化并添加
j = 0;
在嵌套的while
循环前面。请注意while
循环不会将j
初始化为0
删除j
到0
的初始化并添加
j = 0;
在嵌套的while
循环前面。您从未使用while循环将j重置为0
此位:
for(j=0;
使用while循环永远不会将j重置为0
此位:
for(j=0;
缺少的是for
循环在第一次进入时将j
初始化为0
虽然j
在声明时被初始化为0,但是while
循环在另一个while
循环中被调用,因此它不会每次都被重新初始化
添加初始化:
j=0;
while(tmp[j] != '\0'){
if(tmp[j] == str[i]){
found++;
}
j++;
}
你会得到:
Before = Mississippi
After = Misp
缺少的是for
循环在第一次进入时将j
初始化为0
虽然j
在声明时被初始化为0,但是while
循环在另一个while
循环中被调用,因此它不会每次都被重新初始化
添加初始化:
j=0;
while(tmp[j] != '\0'){
if(tmp[j] == str[i]){
found++;
}
j++;
}
你会得到:
Before = Mississippi
After = Misp
上述语法生成的代码相当于:
{
init_statement
while ( condition ) {
statement
iteration_expression ;
}
}
除了
init语句声明的名称(如果init语句是声明)和条件声明的名称(如果条件是声明)
声明)在同一范围内(这也是
声明)
continue
中的语句将执行迭代\u表达式
空条件相当于while(true)
上述语法生成的代码相当于:
{
init_statement
while ( condition ) {
statement
iteration_expression ;
}
}
除了
init语句声明的名称(如果init语句是声明)和条件声明的名称(如果条件是声明)
声明)在同一范围内(这也是
声明)
continue
中的语句将执行迭代\u表达式
空条件相当于while(true)
太长,读不下去了请提供一个简短的例子来说明这个问题。不要发布有效的代码。@WeatherVane很抱歉,用示例删除了该部分。请解释,为什么?有没有机会看到谁投了我的反对票?这标志着我的评论在上面-但这不是我的反对票。我真的需要知道,这个问题出了什么问题。这不对,这里发生了什么事;请提供一个简短的例子来说明这个问题。不要发布有效的代码。@WeatherVane很抱歉,用示例删除了该部分。请解释,为什么?有没有机会看到谁投了我的反对票?这标志着我的评论在上面-但这不是我的反对票。我真的需要知道,这个问题出了什么问题。这不对,这里发生了什么。