2016-02-17 2 views
1

Я пытаюсь вставить значение «item» в отсортированном линейном массиве в позиции «pos» , когда я беру ввод в массиве, используя список инициализации, код работает нормально. Однако, когда я беру вход используя для цикла код не работаетВставка значения в массив

#include<iostream> 
using namespace std; 
int main() 
{ 
const int size = 10; 
int num[size]; 
int num[size] = {1,2,3,4,5,6,7,8,9,10}; //a sorted linear array 
int item; 
int pos; 
int i; 

/* 

for(int a=0;a<size;a++) 
{ 
    cin>>num[a]; 

} 
*/ 

cout<<"Enter item"<<endl; //insert this item in array 
cin>>item; 
cout<<"Enter Position To Insert"<<endl; 

cin>>pos; 

i=size-1; 
while(i>=pos) 
{ 
    num[i+1]=num[i]; 
    i=i-1; 
} 
num[i+1] = item; 

cout<<endl; 
cout<<"array after insertion"<<endl; 
for(int b=0;b<size;b++) 
{ 

    cout<<num[b]<<endl; 
} 


system("pause"); 
return 0; 
} 

для цикла вызывает проблему

for(int a=0;a<size;a++) 
{ 
    cin>>num[a]; 

} 
+1

Вы не можете , Просто используйте 'std :: vector'. –

+0

Я знаю! благодаря ! но это была проблема домашних заданий .. я получил ее на работу, но она просто не работает .. хотел знать, в чем проблема –

+2

Если у вас есть массив из 10 элементов, и вам нужно вставить 1, то вы переполнили массив (присваивая 'num [size]') код, который у вас есть (вам нужно будет удалить последний элемент из массива). – crashmstr

ответ

0

Этот фрагмент кода

i=size-1; 
while(i>=pos) 
{ 
    num[i+1]=num[i]; 
    i=i-1; 
} 
num[i+1] = item; 

неправ. Прежде всего pos может быть больше или равно size В этом случае ни один элемент не должен быть вставлен в массив. Однако в соответствии с последним утверждением фрагмента кода

num[i+1] = item; 

num[size] будет asssigned с item.

снова в цикле для начального значения I, равных size - 1 есть попытка присвоить num[size] элемент

num[i+1]=num[i]; 

фрагмент кода можно переписать, например, следующим образом

if (pos < size) 
{ 
    i = size; 

    while (--i != pos) num[i] = num[i-1]; 

    num[i] = item; 
} 
Смежные вопросы