Member 13805306 Ответов: 2

Почему последний cout выводит s=s, а не s = a ?


#include <iostream>
использование пространства имен std;

int f(int a, double b, char c) {
1. если (c == 'a') {
2. int b = a + 3;
3. А = Б / 2;
4. возврат (b - a);
}
5. остальное, если(с == 'с') {
6. int a = (int) b - 2;
7. int b = a - 6;
8. возврат a - b;
}
еще {
9. возвращает 0;
}
}
тап_п() {
10. int x = 4;
11. двойной y = 2,5;
12. символ s = 'a';
13. Х = ф((инт)г, (двойной)х, з);
14. соиь <&ЛТ; "х =" &ЛТ;&ЛТ; х &ЛТ;&ЛТ; "г=" &ЛТ;&ЛТ; г &ЛТ;&ЛТ; "с =" &ЛТ;&ЛТ; ы &ЛТ;< епси;
15. {
16. int x = -4;
17. двойной y = -1,6;
18. ы = ы';
19. y = (двойной)f(x, y, s);
20. соиь <&ЛТ; "х =" &ЛТ;&ЛТ; х &ЛТ;&ЛТ; "г=" &ЛТ;&ЛТ; г &ЛТ;&ЛТ; "с =" &ЛТ;&ЛТ; ы &ЛТ;< епси;
21. }
22. соиь <&ЛТ; "х =" &ЛТ;&ЛТ; х &ЛТ;&ЛТ; "г=" &ЛТ;&ЛТ; г &ЛТ;&ЛТ; "с =" &ЛТ;&ЛТ; ы &ЛТ;< епси;
23. возвращает 0;
}

Что я уже пробовал:

Я только сегодня узнал о scopes в c++, и я не понимаю, почему последний cout отображает s=s, а не a=a.

2 Ответов

Рейтинг:
1

OriginalGriff

Потому что вы присваиваете ему букву " s " непосредственно перед печатью значения:

s = 's';

И это не меняет befoee вы печатаете значение:
y = (double)f(x, y, s);
cout << "x = " << x << " y= " << y << " s = " << s << endl;
}
cout << "x = " << x << " y= " << y << " s = " << s << endl;
return 0;
Сфера применения здесь не имеет значения - s объявляется в объеме для всего main функция, и значение в переменной не изменяется, когда она покидает блок оператора.

Ваши фигурные скобки "scope" совершенно неуместны в этом примере - вы можете удалить их, не затрагивая приложение вообще.


Рейтинг:
1

Patrice T

Цитата:
Я не понимаю, почему последний cout отображает s=s, а не a=a.

Ваш код ведет себя не так, как вы ожидаете, и вы не понимаете, почему ?
Затем используйте отладчик и наблюдайте за выполнением кода.

В отладчике нет никакой магии, он не знает, что вы должны делать, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.
Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]
1.11 — отладка программы (пошаговое выполнение и останова) | выучить C++[^]