2016-08-23 24 views
-1

当我把六号最后一行(COUT < <“排名:” < <总和+ 1个< < ENDL;)外循环,它说这笔款项并没有在声明这个范围。 代码的正下方:如何在循环外打印总和?我觉得有一个在全局和局部变量的减速一些错误

#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(...) { 
    ... 
}