2014-09-13 79 views
0
char name[4][20]; 
int count=0; 
cout<<"Enter 4 name at most , one name per line:\n"; 
while(cin.getline(name[count++],20)) 
; 
--count; 

(代碼其餘部分是打印如果u需要看到過它放在最後)陣列越來越比它應該

當我輸入名字超過4仍然打印這些名字卻怎麼也發生? 因爲第一個維度是4,因此如何能超過四

printing part of code: 

for(int i=0; i<count; i++) 
{ 
     cout<<i<<"="<<name[i]<<endl; 
} 
system("pause"); 
} 
+0

你需要告訴它停止後4'while'命令不知道如何陣列很大。 – Galik 2014-09-13 07:58:55

+0

但第一個尺寸是4 ,所以當它得到超過4時,程序應該給出錯誤或者其他東西 無論如何,附加名稱應該轉到NAME(數組),但是當第一個維度是4時會發生怎麼樣的情況。 – user3783574 2014-09-13 08:00:13

+1

訪問外部數組的邊界是未定義的行爲。它可能會崩潰,它可能不會,它可能會吹出你的揚聲器。這取決於你堅持的界限。 – 2014-09-13 08:01:21

回答

1

如果我沒有得到它,你都在問「爲什麼如果數組是4,我可以適應5?」。
與Pascal不同,在運行時檢查數組邊界時,C++不會做這樣的事情。

想想吧。數組只是稍後添加偏移量的一些指針。
比方說,你已經5個整數組成的數組,你這樣做

int a[5]; 
a[3] = 3; 
a[6] = 4; 

沒有什麼是真的錯了,因爲在第一次分配,聲明等於a+12,第二個a+24。你只是增加了指針,除非你不打擾操作系統,否則你可能會繼續並可能覆蓋其他一些數據。
因此,如果跨越數組邊界,C++將不太可能說些什麼。 這意味着你必須總是莫名其妙地知道有多大通過簡單地添加到循環是數組,你的情況:

while(count < 4 && cin.getline(name[count++], 20)); 
+0

tnx我現在明白了 – user3783574 2014-09-13 08:14:29

1

你需要告訴while()循環何時停止。

試試這個:

char name[4][20]; 
int count=0; 
cout<<"Enter 4 name at most , one name per line:\n"; 
while(count < 4 && cin.getline(name[count++],20)) 
    ;