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

(остальная часть кода для печати, если и нужно, чтобы увидеть, что тоже находится в конце)массив становится больше, чем это должно

когда я Введите имена более 4 он все еще печатает эти имена, но как может что происходит? , потому что первое измерение 4 так как она может получить больше, чем четыре

printing part of code: 

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

Вы должны сказать ему, чтобы остановить после 4. 'while' команда не имеет понятия, как большой массив. – Galik

+0

, но первое измерение - 4 , поэтому, когда оно получает больше 4, программа должна дать ошибку или что-то , дополнительные имена должны идти в NAME (массив) в любом случае, но как это может произойти, когда первое измерение равно 4 – user3783574

+1

Доступ к внешним границы массива - неопределенное поведение. Это может привести к сбою, возможно, это не приведет к выдуванию пузырьков из ваших динамиков. Это зависит от вас, чтобы придерживаться границ. –

ответ

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

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)) 
    ;