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 있기 때문에 그래서 당신은 때 중지 while() 루프를 말할 필요 개 이상의

printing part of code: 

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

: 이 항상 어떻게 든 배열은 단순히 루프에 추가하여 귀하의 경우, 얼마나 큰 알고해야한다는 것을 의미한다 큰 배열입니다. – Galik

+0

하지만 첫 번째 차원은 4 이므로 4를 초과하면 프로그램에 오류가 발생합니다. 어쨌든 첫 번째 차원이 4 일 때 추가 이름이 NAME (배열)로 이동해야하지만 어떻게 될 수 있습니까? – user3783574

+1

외부 액세스 배열의 경계는 정의되지 않은 동작입니다. 충돌 할 수도 있지만 그렇지 않을 수도 있습니다. 스피커에서 거품이 날 수 있습니다. 경계에 충실하는 것은 당신에게 달려 있습니다. –

답변

1

는, 당신은 요구하고있다 "배열이 4 인 경우 왜 5에 맞게 할 수 있습니까?".
런타임시 배열 경계를 검사하는 Pascal과 달리 C++에서는 이러한 작업을 수행하지 않습니다.

생각해보십시오. 배열은 나중에 오프셋에 추가 된 포인터 일뿐입니다.
은의 당신이 5 개 정수의 배열했습니다한다고 가정 해 봅시다 당신은 첫 임무에서 문 a+12와 두 번째 a+24에 동일하기 때문에이

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

아무것도, 정말 잘못하지 않습니다. 포인터를 증가시키는 것만으로 OS를 귀찮게하지 않으면 계속해서 다른 데이터를 덮어 쓸 수 있습니다.
그래서 C++은 배열의 경계를 넘으면 무언가를 말할 것 같지 않습니다. 당신은 4. 'while` 명령은 어떻게 아무 생각이 없습니다 후 중지를 말할 필요가

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

tnx 지금 받으십시오. – user3783574

1

을 얻을 수있는 방법.

이 시도 : 내가 올바르게 그것을 얻을 경우

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)) 
    ; 
관련 문제