C ++ изменяет длину структуры, сделанной из переменной int и указателя на длинный вопрос - PullRequest
0 голосов
/ 05 мая 2011

Я создал структуру в 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: основная функция и заголовочный файл

Ответы [ 2 ]

1 голос
/ 05 мая 2011

for(i=oldlen;i>newlen;i++){ возможно я

0 голосов
/ 05 мая 2011

for(i=oldlen;i>newlen;i++) должно быть i < newlen Я думаю.

...