因此,这是一个奇怪的问题:
if( x[j] == x[j++])
然后scanf
函数工作正常,但如果我将其更改为if( x[j] == x[j + 1])
,则字符数组的scanf
函数将被无限次调用。
它发生在两个独立的IDE(但是gcc编译器)中。两个看似无关的语句(for循环和if语句)如何相互影响?
main( )
{
char line[10][100], *x;
int i, j, sum;
scanf("%d", &tc);
for(i = 0; i < tc; i++)
{
scanf("%s", line[i]);
}
for( i = 0; i < tc; i++)
{
j = 0;
sum = 0;
x = line[i];
while( x[j] != '\0' )
if(x[j] == x[j+1])
sum++;
printf("%d\n", sum);
}
return 0;
}
答案 0 :(得分:4)
在这个循环中:
while( x[j] != '\0' ) {
if(x[j] == x[j+1]) {
sum++;
}
}
您没有递增j
,因此它是一个无限循环,在x[0]
和x[1]
重复测试相同的两个字符。
要解决此问题,请将其更改为:
while( x[j] != '\0' ) {
if(x[j] == x[j+1]) {
sum++;
}
j++; // <<< increment j on each iteration
}
或使用for
循环使其更简洁:
for (j = 0; x[j] != '\0'; ++j) {
if (x[j] == x[j+1]) {
sum++;
}
}