[英]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.