С++ для начинающих


         

Большее из 10, 20 равно


    cout << endl;

}

Однако программа выдает неправильный результат:

Большее из 10, 20 равно 0

Проблема в том, что оператор вывода имеет более высокий приоритет, чем оператор условного выражения, поэтому печатается результат сравнения val1 и val2. Иными словами, выражение

cout << ( val1 > val2 ) ? val1 : val2;

вычисляется как

(cout << ( val1 > val2 )) ? val1 : val2;

Поскольку val1 не больше val2, то результатом сравнения будет false, обозначаемый нулем. Чтобы изменить приоритет операций, весь оператор условного выражения следует заключить в скобки:

cout << ( val1 > val2  ? val1 : val2 );

Теперь результат получается правильный:

Большее из 10, 20 равно 20

Такого рода ошибку было бы проще найти, если бы значения литералов true и false типа bool печатались как строки, а не как 1 и 0. Тогда мы увидели бы строку:

Большее из 10, 20 равно false

и все стало бы ясно. По умолчанию литерал false печатается как 0, а true – как 1. Это можно изменить, воспользовавшись манипулятором boolalpha(), что и сделано в следующей программе:

int main()

{

                                      cout << "печать значений типа bool по умолчанию: "

                << true << " " << false

                << "\nи в виде строк: "

                << boolalpha()

                << true << " " << false

                << endl;

}

Вот результат:

печать значений типа bool по умолчанию: 1 0

и в виде строк: true false

Для вывода массива, а также вектора или отображения, необходимо обойти все элементы и напечатать каждый из них:

#include <iostream>

#include <vector>

#include <string>

string pooh_pals[] = {

           "Тигра", "Пятачок", "Иа-Иа", "Кролик"

};

int main()

{

           vector<string> ppals( pooh_pals, pooh_pals+4 );

     vector<string>::iterator iter = ppals.begin();


Содержание  Назад  Вперед