2016-08-23 25 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(...) { 
    ... 
}