#arrays #c #algorithm #for-loop #indexing
Вопрос:
Я хочу добавить a1
и a2
в третий массив, a3
. Однако он работает неправильно.
При выполнении следующего кода вывод был:
1 2 3 4 5 5 88237492 23928392 23234242 343344.
Это почему?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 30
int main(){
int a1[]={1,2,3,4,5};
int a2[]={1,2,3,4,5};
int a3[10];
int i=0;
int k=0;
int j=0;
while(i<sizeof(a1)/sizeof(int))
{
a3[i]=a1[i];
i ;
}
while(j<sizeof(a2)/sizeof(int))
{
a3[i]=a2[j];
j ;
}
while(k<sizeof(a3)/sizeof(int))
{
printf("%d ",a3[k]);
k ;
}
return 0;
}
Комментарии:
1. Вы забыли (?) увеличить
i
во второмwhile
цикле (том, который используетj
индекс).2. Во втором цикле while попробуйте увеличить i (i ) также после увеличения j (j )
3. Ошибка отладки:( Вы должны научиться использовать отладчик или, по крайней мере, понять, что вы можете распечатать значения важных переменных, таких как индексы массивов.
Ответ №1:
Я думаю, что другие уже ответили на этот вопрос, но я хочу добавить еще одну вещь, которая может помочь вам в будущем. Как вы объявили, используя массив int a3[10] = {}
. Это приведет к инициализации вашего массива нулями. Тогда это становится легко отлаживать.
Если вы использовали этот формат, то вывод вашей программы будет [1,2,3,4,5,5,0,0,0,0]
таким, что станет легко отлаживать, что после 5 значений не присваиваются. Так что это легко визуализировать и сэкономит время.
Ответ №2:
Посмотрите на свою вторую петлю. Вы неоднократно присваиваете значения a2
to a3[5]
( i
застряло на 5). Остальная часть a3
остается неинициализированной, отсюда и странные значения.
Вы также можете использовать циклы для такого рода вещей
Ответ №3:
Поскольку вопрос касается joining two array's into third one
. Если вам нужна эффективная альтернатива, вы можете напрямую скопировать память каждого массива, используя memcpy()
string.h
файл заголовка from. Но вы должны быть очень осторожны в том, как вы его используете, так как вы можете перезаписать любые другие существующие данные, что может привести к segmentation fault
. Пожалуйста, ознакомьтесь с полной реализацией ниже.
#include<stdio.h>
#include<string.h>
int main()
{
int a1[] = {1, 2, 3, 4, 5};
int a2[] = {6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17};
int a3[17] = {0}; //initializes all elements to 0.
//make a3
memcpy(a3, a1, sizeof(a1));
memcpy(amp;a3[sizeof(a1)/sizeof(int)], a2, sizeof(a2));
//print a3
for(int i=0; i<sizeof(a3)/sizeof(int); i )
printf("%dn", a3[i]);
return 0;
}