#c #function #sorting
#c #функция #сортировка
Вопрос:
Это фрагмент кода для добавления одного и того же числа несколько раз в пустой массив, но когда я печатаю непустой массив, я получаю некоторые другие значения:
#include<stdio.h>
#include<stdlib.h>
void sort_0(int arr[100], int i, int n){
int final_array[100], c=0;
// Count the number of '0' in the array
for(i=0;i<n;i ){
if(arr[i] == 0){
c ;
}
}
// Add the c number of '0' to the final_array
for(i=0;i<c;i ){
scanf("%d",final_array[i]);
}
for(i=0;i<c;i ){
printf("%d ", final_array[i]);
}
}
int main(){
int arr[100], i, n;
// Entering the size of the array
scanf("%d", amp;n);
// Entering n elements into the array
for(i=0;i<n;i ){
scanf("%d", amp;arr[i]);
}
sort_0(arr,i,n);
return 0;
}
В приведенном выше коде подсчитывается количество раз, которое 0
появляется в массиве. Затем количество берется как диапазон и 0
добавляется к количеству пустых массивов final_array
.
Если c = 5
, final_array = {0,0,0,0,0}
Ожидаемый результат:
arr = {0,1,4,3,0}
Output = 2
Я не получаю никаких выходных данных
Комментарии:
1. scanf(«%d», amp;arr[i])
2. Пожалуйста, также покажите ожидаемый результат по сравнению фактический результат (какой из них {0, 0, 0, 0, 0}?) и код, используемый для печати содержимого массива, и как вызывается sort_0.
3. Не связанный, похоже, что i должен быть не параметром функции, а локальной переменной в функции.
4. Я уже написал эту часть, но забыл добавить ее здесь. Он все еще не работает.
5. В принципе, вы хотите создать массив, число
0
которого равноc
? Я прав?
Ответ №1:
Поскольку вы не знаете, сколько 0
вам нужно будет добавить к вашему array_final
, я понял, что лучшим решением может быть создание этого массива после того, как у вас будет номер 0
первого массива. Кроме того, я не вижу причин, по которым вы переходили i
к функции, поскольку вы можете просто определить ее в самой функции.
void sort_0(int arr[10], int n, int* c){
int i;
for(i=0;i<n;i ){
if(arr[i] == 0){
(*c) = 1;
}
}
}
int main (void) {
int size;
printf("Enter array size: ");
scanf("%d", amp;size);
int arr[size];
for (int i=0;i<size;i ) {
scanf("%d",amp;arr[i]);
}
int c = 0;
sort_0(arr, size, amp;c);
printf("C is: %dn",c);
int* final_array;
if ((final_array=malloc(c * sizeof(int)))==NULL) // should always check malloc errors
{
perror("malloc");
return -1;
}
for (int i=0;i<c;i ) {
final_array[i]= 0;
}
printf("{");
for (int i=0;i<c-1;i ) {
printf("%d,", final_array[i]);
}
printf("%d}n",final_array[c-1]);
return 0;
}
Комментарии:
1. Спасибо. Это решило мой запрос. Мне все еще нужно узнать больше о malloc.
2.
malloc
позволяет распределять память динамически. Частьmalloc(c*sizeof(int))
означает, что вы создаете массив размераc
, который содержит тип элементовint
. Это то жеint array[c]
самое, что если вы хотите изменить всюmalloc
деталь целиком.3. @MatteoPinna В вашем коде была небольшая ошибка, я исправил, просто проверьте, все ли в порядке с кодом
4. Да, спасибо. Просто пришлось удалить
{
слишком много.