字符串扫描c

时间:2015-03-09 09:47:21

标签: c string

因此,这是一个奇怪的问题:

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;
}

1 个答案:

答案 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++;
            }
        }