Я создал структуру в C ++ следующего типа:
struct longsir {
int len;
long *sir;
int isinitialised;};
Теперь мне нужно изменить длину структуры, для которой я использовал следующую функцию:
longsir modlen(longsir *s, int newlen){
if (s ->isinitialised ==1 && newlen != s->len) {
if (newlen < s-> len) {
longsir a;
a.len=newlen;
a.isinitialised=1;
a.sir=new long[a.len];
int i;
for (i=0;i<newlen;i++){
a.sir[i]=s->sir[i];};
return a;}
else {
longsir a;
int i; int oldlen=s->len;
a.len=newlen;
a.isinitialised=1;
a.sir=new long[a.len];
for (i=0;i<(s->len);i++){
a.sir[i]=s->sir[i];};
cout <<"Introduceti restul elementelor din sir ";
//Code works till here
for(i=oldlen;i>newlen;i++){
cout <<"Introduceti elementele sirului cu numarul "<<i<<endl;
cin.clear();
cin >> a.sir[i];}
return a;}}}
Итак, когда я решаю использовать значение, превышающее начальную длину исходного массива, код сначала создает новый массив, после чего копирует данные из старого массива и просит пользователя заполнить оставшиеся ячейки. из стандартного В любом случае, при запуске программы она запрашивает только введение оставшихся элементов, а после этого автоматически инициализирует их равными 0. Почему код работает не так, как предлагается? Я не могу найти никакой подсказки об этой ситуации. Большое спасибо за вашу помощь.
P.S. Вы можете увидеть весь оригинальный код на Pastebin: основная функция и заголовочный файл