(C)扫描后比较长长阵列的两个元素不起作用

时间:2014-07-29 21:39:24

标签: c arrays compare scanf

我尝试在C中创建一个通过扫描填充长长阵列的函数,但是如果该元素已经存在则不会接受另一次扫描。然后它要求覆盖doubled元素。我需要这样做因为我需要检查的其他条件,所以array [0]需要留在外面,我必须使用一段时间。

void fillArray(long long array[]) {

    int i = 1, j = 0, size = 1;
    scanf("%Ld", &array[0]);
    while (i < OG && array[i-1] != 0) {
        scanf("%Ld", &array[i]);
        for (j = 0; j < i; j++) {
            while (array[j] == array[i]) {
                printf("Try again!\n");
                scanf("%Ld", &array[i]);
            }
        }
        i++;
    }
}

我尝试输入1, 2, 1,虽然它接受array[0]1array[2]1,但条件array[j] == array[i]不是实现。我只是不明白为什么。

2 个答案:

答案 0 :(得分:1)

首先,定义函数的第二个参数将是一个好主意,它将指定数组的大小。 考虑到函数应该返回填充元素的数量。虽然如果数组末尾的标记是值等于零的元素,那么您可以将函数定义为返回类型为void并且不返回任何内容。:)

我会按照以下方式编写函数

size_t FillArray( long long array[], size_t n ) 
{
    size_t i, j;

    if ( n == 0 ) return n;

    i = 0;

    scanf( "%Ld", &array[0] );

    while ( ++i < n && array[i-1] != 0 ) 
    {
        do
        { 
            scanf( "%Ld", &array[i] );

            j = 0;
            while  ( j < i && array[j] != array[i] ) j++;

            if ( j != i )
            {
                printf( "Try again!\n" );
            }
        } while ( j != i );
    }

    return i;
}

返回类型为void的版本

void FillArray( long long array[], size_t n ) 
{
    size_t i, j;

    if ( n == 0 ) return;

    i = 0;

    scanf( "%Ld", &array[0] );

    while ( ++i < n && array[i-1] != 0 ) 
    {
        do
        { 
            scanf( "%Ld", &array[i] );

            j = 0;
            while  ( j < i && array[j] != array[i] ) j++;

            if ( j != i )
            {
                printf( "Try again!\n" );
            }
        } while ( j != i );
    }
}

然而,在此版本的函数中,数组的大小不应等于0.否则无法区分数组是否已填充或第二个参数是否等于0.

您还可以插入检查scanf是否以错误结束。

答案 1 :(得分:0)

在这部分

while (array[j] == array[i]) {
            printf("Try again!\n");
            scanf("%Ld", &array[i]);
        }

我认为您应该使用if而不是while,因为while将在array[0] != array[i]时保留,因此不会检查数组的其余部分是否相似< / p>