gpt4 book ai didi

c - (C) 扫描后比较 long long 数组的两个元素不起作用

转载 作者:行者123 更新时间:2023-11-30 15:31:10 26 4
gpt4 key购买 nike

我尝试在 C 中创建一个函数,通过扫描填充一个很长的数组,但如果元素已经存在,则不会接受另一次扫描。然后它要求覆盖加倍的元素。我需要这样做是因为我需要检查其他条件,所以 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]。我只是不明白为什么。

最佳答案

首先,定义函数的第二个参数来指定数组的大小是一个好主意。请考虑该函数应返回填充元素的数量。不过,如果数组末尾的标记是值等于零的元素,那么您可以将函数定义为返回类型为 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 是否以错误结束。

关于c - (C) 扫描后比较 long long 数组的两个元素不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25025437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com