2014-12-17 2 views
1

나는 cpp에 부울 데이터 타입으로 약간의 실험을하고 있습니다. 여기 내 코드입니다 :부울 배열로 실험하기

bool **darray; 
darray=new bool* [3]; 
int i=0; 
while(i<3) 
{ 
    darray[i]=new bool [5]; 
    i++; 
} 
int m,n; 
for(m=0;m<3;m++) 
{ 
    for(n=0;n<5;n++) 
    { 
     cin>>darray[m][n]; 
    } 

} 
for(m=0;m<3;m++) 
{ 
    for(n=0;n<5;n++) 
    { 
     cout<<darray[m][n]<<"\t"; 
    } 
    cout<<endl; 
} 

I가 0이 아닌 입력에 저장된 결과가 1 하지만 1보다 큰 수를 입력 할 곧, 배열에 저장된 번호가 1, 나머지가 될 것이라는 점을 알고있다 배열 요소의 0은 0으로 설정되고 for 루프는 거기에서 정지합니다. 내가 루프의 첫 번째 반복에서 숫자 95를 입력하면 예컨대, 출력은 : 왜 이런 일

95 
1 0 0 0 0 // 
0 0 0 0 0 // This is output 
0 0 0 0 0 // 

저를 제안하십시오. 미리 감사드립니다.

+1

모든 배열이 고정 크기 인 경우 동적 할당을 사용하지 마십시오. C++ 11을 사용한다면 [std :: array'] (http://en.cppreference.com/w/cpp/container/array)를 사용하십시오. 그렇지 않으면'bool array [3] [5 ]; 동적 크기의 배열이 필요한 경우에는 ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector)를 고려하십시오. 표시된 코드에 이미 네 개의 메모리 누수가 있습니다. – Nobody

답변

1

state of std::cin is getting corrupted (Or more specifically it's fail bit is set) as expected output (integer) doesn't match given data type (bool)입니다. 그래서, 95 읽은 후, 당신은 더 를 읽을 수 없습니다 취소하지 않는 한 그 플래그

이 당신이 그것을에서 데이터를 읽기 전에/후 스트림의 상태를 확인해야 좋은 예입니다.

+0

손상되지 않습니다. 단지'failbit'이 설정되었습니다. –

+0

@MikeSeymour 나는 당신이 그것을 지우지 않고 더 읽을 수없는 것과 같다고 믿는다 ... – ravi

+0

@MikeSeymour 실제로 나는 그것이 '나쁜'비트라고 생각한다. –

1

그 이유는 수 95에서 부울을 읽는 것은 cinfail 비트를 제기한다는 것이다 (당신은 당신의 코드 끝에 cin.fail()를 인쇄하여 다음을 확인 할 수 있습니다). 즉, bool 값을 읽을 때 전달 된 값은 bool에 적합한 형식이 아닙니다. 읽기는 이미 '실패'했기 때문에 모든 읽기 작업은 아무 것도 읽지 않습니다. 본질적으로 95은 유효한 bool 값이 아니며 cin은 읽는 방법을 알지 못하므로이 순간부터 무엇을해야할지 모를 수 있습니다 (상태가 정상인지 여부를 알 수 없기 때문에).

0

95bool (cin)을 사용하는 bool을 읽을 수있는 유효한 입력이 아닙니다.

if (!(cin >> darray[m][n])) { 
    cerr >> "This is no bool!" >> endl; 
    return EXIT_FAILURE; 
} 

을 또는 입력을 읽으려고 반복하여 오류에서 어떤 방법으로 복구 :

쓰기, 이러한 오류를 감지합니다.

관련 문제