2017-04-08 29 views
0

我必須編寫一個帶有6個函數的數組操作器,這些函數都在main函數中調用。我編寫了大部分函數,​​但我堅持的是用戶從菜單中選擇要在指定索引處添加元素的函數,以及用戶選擇刪除元素的另一個函數。這是代碼我到目前爲止的insertElement功能:試圖在用戶初始化數組中插入一個值?

int main() 
// other cases; 
     case 5: 
      cout << "Enter a value to insert: "; 
      cin >> insert; 
      cout << "Enter a position to insert the value in: "; 
      cin >> pos; 
      pos--; 
       if (pos < 0 || pos > size) 
       { 
        cout << "Invalid Index " << endl; 
       } 
       else 
       { 
        size = insertValue(arr, value, pos, size); 
        displayArray(arr, size); 
       } 
      break; 

int insertValue(int arr[], int value, int pos, int size) 

if (size == 10) 
    cout << "Array full" << endl; 
else 
{ 
    int i; 
    for (i = size - 1; i >= pos; --i) { 
     arr[i + 1] = arr[i]; 
    } 
    arr[i] = value; 
} 
cout << endl; 
return size; 

我覺得我的添加元素的功能是正確的,但是當我的3 4 5陣列值運行它,並告訴程序添加索引1處的數字4,打印3 3 4,數組5不在數組中。我怎樣才能讓程序打印3 4 4 5? 謝謝你的幫助!

+1

您需要在插入後將大小增加1。 –

回答

1

插入後需要將大小增加1。

int insertValue(int arr[], int value, int pos, int size) 
{ 
    if (size == 10) 
     std::cout << "Array full\n"; 
    else 
    { 
     int i; 
     for (i = size - 1; i >= pos; --i) 
     { 
      arr[i + 1] = arr[i]; 
     } 
     arr[pos] = value; 
     ++size; 
    } 
    return size; 
} 
+0

謝謝你的建議,它增加了數組的大小,但現在當我告訴代碼將4插入索引1中的數組3 4 5時,它將打印3 3 4 5而不是3 4 4 5.你知道爲什麼價值降低了? –

+0

我修正了這個錯誤,但是現在當我運行它時,它會打印一個很長的數字或一個垃圾值,然後4 4 5.我的主函數出錯了嗎? –

+0

@SabinaBhuiyan再試一遍。 –

0

大小問題看起來你需要插入後增加的大小。

我想你可能在案例5中還有其他問題。你給一個名爲'insert'的變量,但是你傳遞了一個名爲'value'的變量。我假設'價值'是另一種情況下的變量,並且可能會在插入時引發問題。

〜祝你好運

+1

@ Joe我將它更改爲size = insertValue(arr,insert,pos,size);但現在當我運行它時,它將打印4 4 4 5而不是3 4 4 5.關於爲什麼會發生這種情況的任何想法? –

+0

@SabinaBhuiyan我的猜測是它與你在insertValue for循環中預先遞減計數器的方式有關。嘗試做arr [pos] = value; – Joe

+0

另外,當我嘗試添加值3到數組1 2 3在索引1它打印3 2 2 3.我很困惑,有關如何解決此問題的任何想法?我嘗試了你的建議,但沒有奏效。 –