2013-05-08 2 views
1

The Error생성자 오류, 충돌하기 전에 '는'다음 삼각형을 출력

QuBiEngine::QuBiEngine(ifstream& dnaFile) 
{ 
    int i = 0; 
    while(!dnaFile.eof()) //while the file isn't at its end 
    { 
     dna.push_back(""); //creates an element 
     if(!dnaFile.good())//checks for failbits and other errors 
     { 
      dna[i] = "Not a valid sequence"; 
      i++; 
      continue; 
     } 
     getline(dnaFile, dna[i]); 
     //checks to see if the character is valid ie: a, t, c, g 
     for(int j=0; j<dna[i].length(); j++) 
     { 
      dna[i][j] = putchar(tolower(dna[i][j])); 
      if((dna[i][j]!='a')||(dna[i][j]!='t')||(dna[i][j]!='c')||(dna[i][j]!='g')) 
      { 
       dna[i] = "Not a valid sequence"; 
       i++; 
       break; 
      }    
     } 
     i++;   
    } 
} 

이것은 dnaFile ifstream의 각 라인을 소요하고 테스트를 통과하면 그렇지 않은 경우, 벡터에 넣습니다 그러면 그것은 단지 유효하지 않은 것을 벡터에 넣을뿐입니다.

+0

아마도'! dnaFile.eof()'를 사용하고 싶지 않을 것입니다. 또한, 그 출력을 제공하는 어떤 종류의 입력을 사용하고 있습니까? – Xymostech

+0

@Xymostech 왜'! dnaFile.eof()'를 사용하고 싶지 않습니까? 출력이 있다고 생각하지도 않습니다. 객체를 생성하는 데 과거의 모든 것을 주석 처리했습니다. – SemicolonExpected

+0

'getline '의 반환을 사용하는 것이 일반적으로 더 잘 작동하고 더 안정적입니다. 또한,'putchar' 함수를 호출 할 때 인쇄하고 있습니다. – Xymostech

답변

1

나는 두 번째의 i++ 문이 두 배 증가 때문에 오버플로 만드는 경우를 파악하지 내 벡터.

+0

그리고 그 이유는 처음에 거기서 계속 될거라고 생각했기 때문입니다.) –

+1

if-condition에서 BTW는'||'대신'&&'를 사용합니다 –

+0

고마워요. D 말이 맞아요! – SemicolonExpected

0

당신이 표시된 곳에서 break;를 누락 될 수 있음을 보인다

보다
QuBiEngine::QuBiEngine(ifstream& dnaFile) 
{ 
    int i = 0; 
    while(!dnaFile.eof()) //while the file isn't at its end 
    { 
     dna.push_back(""); //creates an element 
     if(!dnaFile.good())//checks for failbits and other errors 
     { 
      dna[i] = "Not a valid sequence"; 
      i++; 
      continue; 
     } 
     getline(dnaFile, dna[i]); 
     bool bad = false; 
     //checks to see if the character is valid ie: a, t, c, g 
     for(int j=0; j<dna[i].length(); j++) 
     { 
      dna[i][j] = putchar(tolower(dna[i][j])); 
      if((dna[i][j]!='a')||(dna[i][j]!='t')||(dna[i][j]!='c')||(dna[i][j]!='g')) 
      { 
       dna[i] = "Not a valid sequence"; 
       break; 
      }    
     } 
     i++; 
    } 
} 

기타 : dna 변수는 무엇인가? 선언과 초기화를 보여줄 수 있습니까? 당신의 dna가 선언 된 경우 그 외에는

, 당신은 아웃 오브 바운드하지 않도록 (어떤 검사)

+0

그 이후에 아무 것도 없기 때문에, 그 조건이 만족스럽지 않으면 아무 일도하지 않을 것이므로'continue'가 필요하지 않습니다. 그 조건이 충족되면 for 루프에서 빠져 나옵니다. 'dna'는 벡터입니다. 내 클래스 (헤더 파일)에서 개인 변수로 초기화됩니다. 표준'벡터 dna; – SemicolonExpected

+1

내 잘못, 다른 루프를 발견하지 못했습니다. - 그러나 그것은 언급 된 오류를 일으킬 수 없다는 것에 동의합니다. 사용중인 데이터 세트는 무엇입니까? 당신의 if-condition에서 BTW는 아마도'||'대신에'&&'를 원할 것입니다. –