簡體   English   中英

打印數字 , C++

[英]Printing numbers , C++

你好,我寫了代碼,它看起來像這樣(它從 a[] 中獲取第一個數字,然后從 2 的冪中獲取第二個數字,第三個是所有偶數):

#include <iostream>
using namespace std;

int main()
{

    int a[6] = { 1, 2, 5, 6, 7, 9 };
    int i = 0;
    int x;
    int even = 0;
    int sum;

    for (; a[i] < a[6]; i++)
    {
        for (int power = 1; power <= 64; power *= 2)
        {
            x = power % 10;
            for (int even = 0; even <= 6; even += 2)
            {
                sum = (a[i] + x + even);
                if (sum % 7 == 0)
                {
                    cout << a[i] << x << even << "  ";
                }
            }
        }
    }
}

我希望它打印出這些數字: Out: 124 142 214 248 284 518 520 588 610 626 644 680 716 786 914 948 984但我得到的是: 124 142 160 124 142 214 284 266 520 520 610 626 644 680 662 626 644 716 786 914 984 966 Out: 124 142 214 248 284 518 520 588 610 626 644 680 716 786 914 948 984 124 142 160 124 142 214 284 266 520 520 610 626 644 680 662 626 644 716 786 914 984 966

我不知道問題出在哪里,數字翻了幾倍。 請問有人可以幫我嗎?

您錯誤地訪問a[6] ,這是一種未定義的行為。

內置的下標表達式是這樣工作的:如果我們對數組a執行a[b] ,那么它等價於*(a+b) ,而數組的第一個子對象存儲在a (這里a指的是指針純右值數組衰減到)。 因此,要訪問數組中的第一個元素,我們使用a[0] ,即*a

數組聲明中發生的數字是它的大小,正式地說,它可以容納的元素數。 因此,如果你做一個簡單的數學問題,最后一個有效的下標是size - 1 ,而不是size

我覺得這里你需要改變

for (; a[i] < a[6]; i++)

for (; a[i] < a[5]; i++)

暫無
暫無

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

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