我尝试在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]
为1
而array[2]
为1
,但条件array[j] == array[i]
不是实现。我只是不明白为什么。
答案 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>