2013-05-08 2 views
1

The ErrorКонструктор 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

BTW в вашем if-условии вы, вероятно, хотите '&&' вместо '||' –

+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' - это вектор, который инициализируется в моем классе (заголовочный файл) как приватная переменная standard' vector dna; ' – SemicolonExpected

+1

Мой плохой, я еще не заметил другого цикла - я имел в виду' break' not 'continue' - но я согласен, что это не могло вызвать упомянутую ошибку. Что такое набор данных, который вы используете? BTW в вашем if-состоянии вы, вероятно, хотите '&&' вместо '||' –