C++ 数组得到了超出它应该得到的值 字符名[4][20]; 整数计数=0; cout

C++ 数组得到了超出它应该得到的值 字符名[4][20]; 整数计数=0; cout,c++,arrays,C++,Arrays,您需要告诉while()循环何时停止 试试这个: printing part of code: for(int i=0; i<count; i++) { cout<<i<<"="<<name[i]<<endl; } system("pause"); } 字符名[4][20]; 整数计数=0; 如果我理解正确,你会问“如果数组是4,为什么我可以容纳5?”。 不像Pascal,在运行时检查数组边界,C++不会做这样的事情。 想

您需要告诉
while()
循环何时停止

试试这个:

printing part of code:

for(int i=0; i<count; i++)
{
        cout<<i<<"="<<name[i]<<endl;
}
system("pause");
}
字符名[4][20];
整数计数=0;

如果我理解正确,你会问“如果数组是4,为什么我可以容纳5?”。 不像Pascal,在运行时检查数组边界,C++不会做这样的事情。 想想看。数组只是稍后添加偏移量的指针
假设你有一个由5个整数组成的数组,你可以这样做

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))
    ;
没有什么真正的错误,因为在第一个赋值中,语句等于
a+12
,第二个赋值等于
a+24
。您只是在增加指针,除非您不打扰操作系统,否则您可能会继续并潜在地覆盖一些其他数据。
所以C++如果你跨越数组边界,就不太可能说什么。 这意味着您必须始终以某种方式知道数组有多大,在您的情况下,只需添加到循环:

int a[5];
a[3] = 3;
a[6] = 4;
while(count<4&&cin.getline(name[count++],20));

您需要告诉它在4点后停止。
while
命令不知道数组有多大。但是第一个维度是4,因此当它超过4时,程序应该给出一个错误或其他东西,附加名称应该转到名称(数组),但是当第一个维度是4访问数组边界之外时,如何发生这种情况是未定义的行为。它可能会崩溃,也可能不会,它可能会把你的扬声器吹出气泡。这取决于你是否遵守边界。“但是维度是4”-我知道,你也知道,但是
while()
没有。它所关心的只是你告诉它停在什么条件下。当前,只有当
cin.getline()
失败时,它才会停止。可能会重复
int a[5];
a[3] = 3;
a[6] = 4;
while(count < 4 && cin.getline(name[count++], 20));