C i++;在if条件和i++;在while循环中的if之后?
两个代码段之间的逻辑区别在于,在第一个代码段中,变量C i++;在if条件和i++;在while循环中的if之后?,c,if-statement,while-loop,C,If Statement,While Loop,两个代码段之间的逻辑区别在于,在第一个代码段中,变量i仅在ptype为'B'或'p'时才会递增。但是,在第二个代码段中,i随着while循环的每次迭代而递增,而不管ptype的值是多少 在第二个版本中,while循环将迭代最多N次,而不考虑输入。但是,第一个版本的迭代次数是无限的,仅在输入'B'或'P'次后停止。主要区别在于,在if语句中增加计数意味着如果出现两个列出的选项中的任何一个,它将增加,而在if语句中增加计数意味着它将始终增加。 当前的问题是如果ptype!==“P”| |“B”则不会
i
仅在ptype
为'B'
或'p'
时才会递增。但是,在第二个代码段中,i
随着while
循环的每次迭代而递增,而不管ptype
的值是多少
在第二个版本中,
while
循环将迭代最多N次
,而不考虑输入。但是,第一个版本的迭代次数是无限的,仅在输入'B'
或'P'
次后停止。主要区别在于,在if语句中增加计数意味着如果出现两个列出的选项中的任何一个,它将增加,而在if语句中增加计数意味着它将始终增加。 当前的问题是如果ptype!==“P”| |“B”则不会递增
第一种情况: 在if条件内,如果ptype等于p,我将得到增量1,如果ptype也等于B,我将再次得到增量1。因此,当且仅当两个条件都满足时,i上的总增量将为2(1+1)。
第二种情况:
i++在if外部,但在while内部:因此,无论if条件如何,我在while的每次迭代中都会增加1。所以,每次迭代时,i上的总增量为1
因此,在第一种情况下,如果两个“if”条件都满足,我将增加两倍,而在第二种情况下,在while循环的每次迭代中,我将增加一倍 这里,
i
仅当ptype
即扫描字符为p或B时才会递增。换句话说,i
将在控件进入if
块时递增
i++在while循环中的if之后
在这种情况下,i
将在while
循环的每次迭代中递增
此外,第一种情况还意味着如果未扫描所需的字符,
while
循环将迭代超过N
次。然而,在第二种情况下,while循环将仅迭代N
次,而不管是否找到所需的字符 当两个条件都满足时,在第一个示例中i增加两次,但在第二个示例中仅增加一次example@NotGaeL如果我读得正确,这两个条件都无法满足,因为ptype
只能有一个值,而if
子句不会更改该值,在第一个例子中,如果不满足任何条件,我将不增加,但在第二个例子中,它将通过在第一个循环中将ptype
的内容重新分配到'B'
来增加。这不是很明显吗?在第一种情况下,我增加了2,我不明白原因,虽然我完全理解你的答案,但当你的答案被考虑时,在上述输入的情况下,它不应该给出不同的结果。我已经提到,我将增加两倍,第一次是ptype='P',第二次是ptype的时间==“B”,因此,i上的总增量将为2(1+1)我已经提到,当且仅当ptype=p且也等于B时,增量将发生两次@tod@AmbrishPathak在第一种情况下,它增加两次的原因是因为它在一行中读取一个字符,然后读取一个整数,所以在每行中循环执行两次。@tod是的,代码是正确的,我得到了它的答案增加两倍,您可以阅读上面的内容。
int i = 0 ;
while(i < N)
{
char ptype ;
scanf("%c" , &ptype);
//getchar();
if(ptype == 'P'){
scanf("%d" , &passto);
//printf("\n");
preplayer = arr[top];
top++;
arr[top] = passto;
printf("%d\n", i);
i++;
}
if(ptype == 'B'){
int tempplayer = arr[top];
top++;
arr[top] = preplayer ;
preplayer = tempplayer;
i++;
}
//++i;
}
int i = 0 ;
while(i < N)
{
char ptype ;
scanf("%c" , &ptype);
if(ptype == 'P'){
scanf("%d" , &passto);
//printf("\n");
preplayer = arr[top];
top++;
arr[top] = passto;
printf("%d\n", i);
//i++;
}
if(ptype == 'B'){
int tempplayer = arr[top];
top++;
arr[top] = preplayer ;
preplayer = tempplayer;
//i++;
}
i++;
}
1
10 23
P 86
P 63
P 60
B
P 47
B
P 99
P 9
B
B