2014-09-13 66 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)) 
    ;