嗨,我想知道为什么我无法更改变量“cinter”的值:
int nbobject=7, cinter, i, *inter;
printf("\nHow many elements in array :");
scanf("%d", &cinter);
inter=malloc(nbObject*sizeof(int));
printf("\nEnter the elements :");
for(i=0;i<cinter;i++){
scanf("%d",&inter[i]);
}
qsort(inter, cinter, sizeof *inter, compare);
noDuplicate(inter, cinter);
cinter=noDuplicate(inter,cinter);
for(i=0;i<cinter;i++){
printf("%d", inter[i]);
}
printf("\nNumber of elements in array : ");
printf("%d", cinter);
printf("\nArray elements : ");
for (i=0;i<cinter;i++){
printf("%d ", inter[i]);
}
int noDuplicate( int arr[],int size ){
int i=0, j=0;
for (i = 1; i < size; i++){
if (arr[i] != arr[j]){
j++;
arr[j] = arr[i]; // Move it to the front
}
}
// The new array size..
size = (j + 1);
return size;
}
所以我所做的只是对数组进行排序并删除重复项。我希望变量“cinter”将数组中的元素数量减去删除的元素数量,以便稍后我可以使用它来了解数组中有多少相关元素,但无论我总是最终得到相同的数字。
输出:
How many elements in array : 6
Enter the elements : 2 1 2 3 5 1
Number of elements in array : 6
Array elements : 1 2 3 5 3 5
编辑:@Arash 这是您可以运行的代码,我所需要的只是能够在删除重复项时更改 cinter 的值,以便稍后可以使用它来确切地知道我的数组中有多少相关项目。
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
static int compare (void const *a, void const *b){
int const *pa = a;
int const *pb = b;
return *pa - *pb;
}
void main(){
int nbObjets=7, *inter;
size_t cinter;
size_t i, j;
printf("\nHow many elements in the array :");
scanf("%d", &cinter);
inter=malloc(nbObjets*sizeof(int));
printf("\nEnter the elements :");
for(i=0;i<cinter;i++){
scanf("%d",&inter[i]);
}
qsort(inter, cinter, sizeof *inter, compare);
noDuplicate(inter, cinter);
cinter=noDuplicate(inter, cinter);
printf("\nNumber of elements in the array (cinter) : ");
printf("%d", cinter);
printf("\nArray elements : ");
for (i=0;i<cinter;i++){
printf("%d ", inter[i]);
}
}
int noDuplicate( int arr[], size_t size ){
size_t i=0, j=0;
for (i = 1; i < size; i++){
if (arr[i] != arr[j]){
j++;
arr[j] = arr[i]; // Move it to the front
}
}
// The new array size..
size = (j + 1);
return size;
}
编辑:我通过进行 Arash 告诉我要做的更改来使其正常工作,感谢大家的帮助!
最佳答案
您可以使用传递地址来解决问题:
void noDuplicate( int arr[],size_t *size ){
size_t i=0, j=0;
for (i = 1; i < *size; i++){
if (arr[i] != arr[j]) {
j++;
arr[j] = arr[i]; // Move it to the front
}
}
// The new array size..
*size = (j + 1);
}
然后你这样调用它:
noDuplicate(inter, &cinter);
关于c - 从c中的数组中删除重复元素,无法修改变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43551360/