2015-09-24 3 views
0

Новое на C++. При попытке отладки кода я получаю сообщение об ошибке «вне диапазона». Я попытался использовать resize(), но он все еще не исправлен. Код состоит в том, чтобы читать инструкции в вектор 2d и распечатывать график. Что я делаю неправильно?C++ error: векторный индекс вне диапазона, строка 1201

#include<iostream> 
#include<fstream> 
#include<vector> 
#include<string> 
#include<sstream> 

using namespace std; 

typedef struct Pattern{ 
    int rowNum; 
    int colNum; 
    char token; 
    bool isTriangular; 
    bool isOuter; 
}Pattern; 

void CommandProcessing(vector<string>&, Pattern&); 
void Builder(Pattern&, vector<vector<char>>&); 
void Printer(vector<vector<char>>&); 

int main() 
{ 
    Pattern characters; 
    vector<vector<char>> key; 

    characters.colNum = 3; 
    characters.rowNum = 3; 
    characters.token = '@'; 
    characters.isOuter = false; 
    characters.isTriangular = false; 

    Builder(characters, key); 
    Printer(key); 
} 

void Builder(Pattern& character, vector<vector<char>>& matrix) 
{ 
    int i = 0, j = 0; 
    char c; 

    if (character.token == 0) 
     c = 'a'; 
    else 
     c = character.token; 

    matrix.resize(character.rowNum); 
    for (int i = 0; i < character.rowNum; i++){ 
     if (character.isTriangular) 
      matrix[i].resize(i + 1); 
     else 
      matrix[i].resize(character.colNum); 

     if (character.isOuter) 
     { 
      if (character.isTriangular) 
      { 
       if (i = j) 
        matrix[i][j] = c; 
       else 
        matrix[character.rowNum - 1][i] = matrix[i][0] = c; 
      } 
      else 
       matrix[0][j] = matrix[i][0] = matrix[character.rowNum - 1][j] = matrix[i][character.colNum - 1] = c; 
      i++; 
      j++; 
     } 

     else 
     { 
      if (character.isOuter) 
      { 
       while (i <= j){ 
        for (i = 0; i < character.rowNum; i++) 
         for (j = 0; i < character.colNum; j++) 
          matrix[i][j] = c; 
       } 
      } 
      else 
       for (i = 0; i < character.rowNum; i++) 
        for (j = 0; i < character.colNum; j++) 
         matrix[i][j] = c; 
     } 
     c++; 
    } 

} 
void Printer(vector<vector<char>>& print) 
{ 
    for (int i = 0; i < print.size(); i++){ 
     for (int j = 0; j < print[i].size(); j++) 
     { 
      cout << print[i][j] << endl; 
     } 
    } 
} 
+1

Давать номер строки в заголовке без маркировки, где она находится в вашем публикуемом коде бесполезно (и, к счастью, не создавать 1200+ линии) ... – Jarod42

+0

@ Jarod42 Я понятия не имею, почему это говорит строка 1201, это все строки, которые у меня есть –

+0

Это должна быть строка в векторном заголовке ... BTW, с отладчиком, вы должны знать и выделять, какая строка вашего кода имеет проблемы. – Jarod42

ответ

1

if (i = j) должен быть if (i == j).

if (i = j) выполнить назначение и проверить, если i != 0.

Другие проблемы:

while (i <= j){ 
    for (i = 0; i < character.rowNum; i++) 
     for (j = 0; i < character.colNum; j++) // You test `i` instead of j 
      matrix[i][j] = c; 
    // Once test fixed 
    // Here `i == character.rowNum` and `j == character.colNum` (if `character.rowNum != 0`) 
    // So the while loop condition doesn't change and may so do infinite loop 
} 
+0

Написал, что проблема в 'for (j = 0; i YePhIcK

+0

Я исправил тест, но я до сих пор не понимаю 'if character.rowNum! = 0' part –

+0

Короче говоря, я сказал, что' while (i <= j) 'должен быть удален (или логическая внутренность должна быть изменена). – Jarod42

Смежные вопросы