簡體   English   中英

將值從一個數組復制到另一個數組

[英]Copying values from one array to another

它應該很簡單,兩個數組,一個有 5 個,另一個有 6 個元素。

#include <stdlib.h>
#include <stdio.h>

int main()
{
    int i=0;
    int k=0;
    int v[5] = {2,3,4,5,6};
    int g[6];

    for( i = 1; i <= 6; i++ ){
        k= i + 1;
        if ( 1 == i && 2 == i)
        {
            g[k]=v[i];
        }
        else
        {
            g[k]=(v[i]+10);
        }

        printf("%d\n",g[k]);
    }

    return 0;
}

我懂了

13
14
15
16
32776
10

我真的很想要

2 3 13 14 15 16

我的錯誤在哪里?我應該創建函數還是什么?

問題一

數組索引從 0 開始,這意味着v[0]g[0]是數組的第一個元素。 你所有的ik都減一。

問題二

1 == i && 2 == i永遠不會為真。 如果1 == i ,則2 != i 如果2 == i ,則1 != i

1 == i && 2 == i

應該

1 == i || 2 == i

問題三

您的循環有 5 次通過,但需要 6 次!

1) g[0] = v[0];
2) g[1] = v[1];
3) g[2] = v[1]+10;
4) g[3] = v[2]+10;
5) g[4] = v[3]+10;
6) g[5] = v[4]+10;

解決方案

#include <stdlib.h>
#include <stdio.h>

int main() {
    int v[5] = {2,3,4,5,6};
    int g[6];

    for( int i = 0; i < sizeof(g)/sizeof(*g); ++i ) {
        if ( 0 == i || 1 == i )
           g[i] = v[i];
        else
           g[i] = v[i-1]+10;

        printf("%d\n", g[i]);
    }

    return 0;
}

注意

if ( 0 == i || 1 == i )

可以簡化為

if ( 2 < i )

您的代碼有幾個問題:

  • if ( 1 == i && 2 == i)將始終返回false因為變量不能同時為 1 和 2。
  • 您的循環迭代器采用的值大於應有的值; i變為56v[i]g[i]會觸發對超出各自數組內存范圍的內存位置的讀取,這解釋了輸出中的隨機值。

我認為這就是你想要的:

#include <stdlib.h>
#include <stdio.h>

int main()
{
    int i = 0;
    int v[5] = {2, 3, 4, 5, 6};
    int g[6];

    for ( i = 0; i < 6; i++ )
    {
        if ( i < 2 )
        {
            g[i] = v[i];
        }

        else
        {
            g[i] = ( v[i - 1] + 10 );
        }

        printf ( "%d\n", g[i] );
    }

    return 0;
}

輸出:

2 3 13 14 15 16

它永遠不會進入if條件塊,因為 i 不能同時為 1 和 2。
所以你的代碼將輸入到其他...
它將從索引 1 開始;
所以在 else 的這個表達式中: g[k]=(v[i]+10); --- v[i]=> 3並且當您到達索引 5 或 6 時,它在您的 v 數組之外....

for( i = 1; i <= 6; i++ ){
        k= i + 1;
        if ( 1 == i && 2 == i) //never enter here...
        {
            g[k]=v[i];
        }
        else
        {
            g[k]=(v[i]+10); //index get outside the vector length
        }

        printf("%d\n",g[k]);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM