2015-04-13 2 views
0
string readString(string p) 
{ 
    string s; 

    cout << p; 
    cin >> s; 
    return s; 
} 

int main() 
{ 
    string oper = readString("? "); 
    while (oper != "Q") 
    { 
     if (oper == "l") 
      cout << "load complete" << endl; 
     else if (oper == "+") 
      cout << "add complete" << endl; 
     string oper = readString("? "); 
    } 
} 

Когда я нахожу l, выход load complete. Но затем я вводил +, он все еще выводит load complete. Почему он не выводит add complete?Функция CPP не может получить правильный выход

http://ideone.com/JCDdXk

ответ

6

Вы объявляете две переменные, называемые oper.

int main() 
{ 
    string oper = readString("? "); //HERE 
    while (oper != "Q") 
    { 
     string oper = readString("? "); //HERE 
    } 
} 

Вторая линия, помеченная HERE объявляет новую переменную в текущей области, а не обновление существующей в содержащей области. Изменить это:

oper = readString("? "); 
+0

Черт, который был быстро ... – trojanfoe

+0

это работает, но я до сих пор путают, как это новая переменная влияет на все это? – XIAODI

+0

Поскольку ваша новая переменная имеет автоматическое хранилище, она сохраняется до конца ее содержащей области, то есть цикла while. Итак, все, что вы делаете, это создание новой «строки», а затем ее уничтожение почти мгновенно. – TartanLlama

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