2016-08-23 1 views
-1

Когда я поставил 6-й последнюю строку (соиЬ < < «ранга:» < < сумма + 1 < < епсИ;) вне цикла он говорит, что сумма не была объявлена ​​в этот объем. Код прямо ниже:Как распечатать сумму за пределами цикла? Я думаю, что есть какая-то ошибка в замедлении глобальной и локальной переменной

#include <iostream> 
#include <vector> 
#include <string> 
#include <algorithm> 

using namespace::std; 

int main() { 

string input; 
cout << "Don't enter repetitive alphabet word \n" << "Enter a word : "; 
getline(cin, input); 

vector<char> myVector(input.begin(), input.end()); 
vector<char> myVector2(input.begin(), input.end()); 

sort(myVector2.begin(), myVector2.end()); 

if(myVector2 == myVector){ 
    cout << "rank : 1"; 
} 

else{ 
    for (int i = 0; i < myVector2.size(); i++){ 
     //cout << myVector2[i]; 
    } 

    cout << endl; 

    int q = 0, value = 1, w = 1; 
    while(q < myVector.size()){ 
     int k = 0, temp = 0, sum, value = 1, w = 1; 
     while(k < myVector2.size()){ 
      while(myVector2[k] != myVector[q] && k < myVector2.size()){ 
       while(w < myVector2.size()){ 
        value = value * w ; 
        w++; 
       } 
       k++; 
      } 
      temp = value * (k); 

      break; 
     } 
     sum = sum + temp; 

     myVector2.erase(myVector2.begin()+k); 
    /* for(int j = 0; j < myVector2.size(); j++){ 
      cout << myVector2[j]; 
     }*/ 

     cout << "rank : " << sum + 1 << endl; 
     q++; 
    } 

} 
} 

Как напечатать 6-ю последнюю строку: COUT < < "ранга": < < сумму + 1 < < ENDL; вне петли? И, пожалуйста, объясните причину.

+0

Проблема в том, что ваша 'sum' объявлена ​​в цикле. Переместите декларацию вверх. – alexeykuzmin0

+0

Определить переменную 'sum' вне цикла, а? –

+0

Кроме того, переменная 'sum' не инициализируется до ее использования, поэтому вы имеете * неопределенное поведение *, когда вы делаете' sum + temp'. –

ответ

0

В C++ каждый раз, когда фигурные скобки открыты, создается новая область и при закрытии она разрушается. Каждая область доступа имеет доступ к другим областям, если они не уничтожены.

Ваш сумма заявлена ​​в пределах диапазона в первом , а. Поэтому, когда в то время как цикл закрыт, область действия уничтожается, что приводит к аннулированию/уничтожению объявления суммы.

Вы должны объявить сумму перед вашей петлей, и вы, вероятно, захотите ее инициализировать.

int q = 0, value = 1, w = 1, sum = 0; 
while(...) { 
    ... 
}