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;
}
而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++;
}
它们都给出了不同的结果。 假设在代码之上定义了其他变量,如N = 10;和其他整数和字符也被定义。
以下两个代码在以下输入的情况下给出不同的结果:
1
10 23
P 86
P 63
P 60
B
P 47
B
P 99
P 9
B
B
答案 0 :(得分:2)
两个代码段之间的逻辑差异在于,在第一个代码片段中,如果i
为ptype
或'B'
,则变量'P'
仅会增加。但是,在第二个代码段中,i
随着while
循环的每次迭代而递增,而不管ptype
的值是多少。
在第二个版本中,while
循环将迭代最多N
次,无论输入如何。但是,第一个版本会无限次迭代,只有在'B'
或'P'
输入N
次后才会停止。
答案 1 :(得分:1)
第一种情况:
如果是条件,如果ptype等于p,我将增加1,如果ptype也等于B,它将再增加1因此,i上的总增量将是2(1 + 1){{ 1}}所以,这意味着如果不满足这两个条件,i就不会发生增量。
第二种情况:
i ++外面if但是在inside while:所以我会在每次迭代时增加1,而不管条件如何。因此,迭代时,i的总增量将为1。
因此,在第一种情况下,如果满足两个'if'条件,我将增加两次,而在第二种情况下,在while循环的每次迭代中它将增加一次
答案 2 :(得分:0)
主要的区别在于,在if语句中使用计数增量意味着如果出现两个列出的选项并且将其从if语句中删除则意味着它将始终递增,它将递增。 这个问题就在于ptype!==“P”|| 'B'然后它不会增加。
答案 3 :(得分:0)
i ++:
此处i
只会在ptype
时增加,即扫描的字符为 P 或 B 。换句话说,当控件进入i
块中的任何一个时,if
将递增。
i ++之后的if if while循环
在这种情况下,i
将在while
循环的每次迭代中递增。
此外,第一种情况还意味着如果不扫描所需的字符,while
循环将迭代超过N
次迭代次数。然而,在第二种情况下,while循环将仅迭代N
次迭代,而不管是否找到所需的字符。