簡體   English   中英

按下回車鍵后數組輸入變為0

[英]Array input after pressing enter becoming 0

#include <iostream>
using namespace std;
 int main() {
        int start_time[3];
        int final_time[3];

        int i;
        for(i=0;i<3; i++)
            cin >> start_time[i];

        for(i=0;i<3;i++)
            cin >> final_time[i];

        int a[10];
        for(i=0;i<=10;i++)
            a[i]=0;

        for(i=0;i<3;i++){
            cout << start_time[i] << " " << final_time[i] << endl;
        }



    }

如果我輸入以下內容:

23 53 09
23 53 10 

我們看到的輸出是:

23 0
53 53 
9 10

為什么在按回車鍵后,final_time的起始輸入等於0?

我該如何解決?

您正在通過數組a的界外索引來調用未定義的行為

for循環

for(i=0;i<=10;i++)
        ~~~

應該使用i < 10將10個元素從0索引到9

    int a[10];
    for(i=0;i<=10;i++)
        a[i]=0;

在本部分中,您將0寫入a[10] 但是a[10]不存在。 a[]只有10個整數的空間,索引為0到9。因此,您正在向內存中的某個位置寫入零,並且您偶然覆蓋了final_time[0] 可能是其他原因,也可能導致程序崩潰。

通過像其他循環一樣將循環更正為for(i=0;i<10;i++)來解決此問題。

在數組的分配范圍之外寫入數組是C ++中未定義的行為。 這基本上意味着它沒有在標准中定義,並且每個編譯器供應商都將不得不為自己的產品做一些准備,如果這樣做,將會發生什么。 因此,它是相當隨機的,因此很差(tm)。 當您切換編譯器時,您可能會得到不同的行為,甚至在重新啟動程序時甚至可能會得到不同的行為。 在您的情況下,您的編譯器供應商(與其他許多供應商一樣)決定,他們將不會檢查開發人員是否正確。 他們只寫零到內存中的空間a[10] 一直在,有它的存在。 但事實並非如此。 碰巧的是,內存中的那個位置還有另一個變量。 這樣一來,它的值就會被零覆蓋。

暫無
暫無

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

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