Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
29 / 6 / 0
Регистрация: 20.02.2016
Сообщений: 1,061
1

Если bool name=false, то !name это true?

08.06.2017, 21:08. Просмотров 967. Ответов 7
Метки нет (Все метки)

Добрый день!
Привожу код, взятый из книги. Непонятны следующие строки
bool found_one = false; строка 104
if( !found_one )
строка 109
Если переменная found_one инициализируется, как false, то !found_one это true? Для чего ввели эти строки?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include <iostream>
#include <list>
#include <algorithm>
#include <string>
using namespace std;
 
class person
   {
   private:
      string lastName;
      string firstName;
      long phoneNumber;
   public:
      person() :             // no-arg constructor
           lastName("blank"), firstName("blank"), phoneNumber(0L)
         {  }
                             // 3-arg constructor
      person(string lana, string fina, long pho) :
              lastName(lana), firstName(fina), phoneNumber(pho)
         {  }
      friend bool operator<(const person&, const person&);
      friend bool operator==(const person&, const person&);
      friend bool operator!=(const person&, const person&);
      friend bool operator>(const person&, const person&);
 
      void display() const   // display all data
         {
         cout << endl << lastName << ",\t" << firstName
              << "\t\tPhone: " << phoneNumber;
         }
 
      long get_phone() const // return phone number
         { return phoneNumber; }
   };
                             // overloaded == for person class
bool operator==(const person& p1, const person& p2)
   {
   return (p1.lastName == p2.lastName &&
           p1.firstName == p2.firstName ) ? true : false;
   }
                             // overloaded < for person class
bool operator<(const person& p1, const person& p2)
   {
   if(p1.lastName == p2.lastName)
      return (p1.firstName < p2.firstName) ? true : false;
   return (p1.lastName < p2.lastName) ? true : false;
   }
                             // overloaded != for person class
bool operator!=(const person& p1, const person& p2)
   { return !(p1==p2); }
                             // overloaded > for person class
bool operator>(const person& p1, const person& p2)
   { return !(p1<p2) && !(p1==p2); }
 
int main()
   {
   list<person> persList;    // list of persons
                             // iterator to a list of persons
   list<person>::iterator iter1;
                             // put persons in list
   persList.push_back( person("Deauville", "William", 8435150) );
   persList.push_back( person("McDonald", "Stacey", 3327563) );
   persList.push_back( person("Bartoski", "Peter", 6946473) );
   persList.push_back( person("KuangThu", "Bruce", 4157300) );
   persList.push_back( person("Wellington", "John", 9207404) );
   persList.push_back( person("McDonald", "Amanda", 8435150) );
   persList.push_back( person("Fredericks", "Roger", 7049982) );
   persList.push_back( person("McDonald", "Stacey", 7764987) );
 
   cout << "\nNumber of entries = " << persList.size();
 
   iter1 = persList.begin();  // display contents of list
   while( iter1 != persList.end() )
      (*iter1++).display();
 
// find person or persons with specified name (last and first)
   string searchLastName, searchFirstName;
   cout << "\n\nEnter last name of person to search for: ";
   cin >> searchLastName;
   cout << "Enter first name: ";
   cin >> searchFirstName;
                              //make a person with that name
   person searchPerson(searchLastName, searchFirstName, 0L);
                              //search for first match of names
   iter1 = find(persList.begin(), persList.end(), searchPerson);
   if( iter1 != persList.end() )  //find additional matches
      {
      cout << "Person(s) with that name is(are)";
      do
         {
         (*iter1).display();  //display match
         ++iter1;             //search again, one past match
         iter1 = find(iter1, persList.end(), searchPerson);
         } while( iter1 != persList.end() );
      }
   else
      cout << "There is no person with that name.";
 
// find person or persons with specified phone number
   cout << "\n\nEnter phone number (format 1234567): ";
   long sNumber;              //get search number
   cin >> sNumber;
                              //iterate through list
   bool found_one = false;
   for(iter1=persList.begin(); iter1 != persList.end(); ++iter1)
      {
      if( sNumber == (*iter1).get_phone() )  //compare numbers
         {
         if( !found_one )
            {
            cout << "Person(s) with that phone number is(are)";
            found_one = true;
            }
         (*iter1).display();  //display the match
         }
      }  //end for
   if( !found_one )
      cout << "There is no person with that phone number";
   cout << endl;
   return 0;
   }
Заранее спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.06.2017, 21:08
Ответы с готовыми решениями:

Изменить значение bool a = true в bool a = false
// Логическое выражения - варианты #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; ...

как правильно понять тип bool ? bool true(const string &str) и что дает это значение ?
задам может глупый вопрос, но прошу ответить. как правильно понять тип bool ? bool...

Ошибка в программе (forcing value to bool 'true' or 'false' (performance warning) )
.\DX9Window.cpp(86) : warning C4800: 'WORD' : forcing value to bool 'true' or 'false' (performance...

Как вывести значение переменной bool в виде литералов false и true?
В C++ когда я вывожу значение переменной bool, оно выводится всегда 1 или 0. Как сделать чтобы...

7
nd2
3399 / 2781 / 1250
Регистрация: 29.01.2016
Сообщений: 9,423
08.06.2017, 21:14 2
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
Для чего ввели эти строки?
Для того, чтобы после цикла поиска, можно было проверить: было ли что-то найдено, или поиск не дал результатов.
0
29 / 6 / 0
Регистрация: 20.02.2016
Сообщений: 1,061
08.06.2017, 21:18  [ТС] 3
nd2, а !found_one это true?
0
nd2
3399 / 2781 / 1250
Регистрация: 29.01.2016
Сообщений: 9,423
08.06.2017, 21:22 4
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
!found_one это true?
Если found_one == false, то !found_one == true. И наоборот.
2
29 / 6 / 0
Регистрация: 20.02.2016
Сообщений: 1,061
09.06.2017, 16:43  [ТС] 5
Вопрос вот в чём

C++
1
2
3
4
5
if( !found_one )//то есть, если found_one==true...
{
            cout << "Person(s) with that phone number is(are)";
            found_one = true;//...то found_one присваивается true? Зачем, если переменная итак уже true?
 }
0
nd2
3399 / 2781 / 1250
Регистрация: 29.01.2016
Сообщений: 9,423
09.06.2017, 16:51 6
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
C++
1
if( !found_one )//то есть, если found_one==true...
Если !found_one равен true, а для этого found_one должен быть равен false.
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
Вопрос вот в чём
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
Зачем, если переменная итак уже true?
С чего бы это?
Цитата Сообщение от nd2 Посмотреть сообщение
Если found_one == false, то !found_one == true.
Ясно же сказано: !found_one, т.е, результат этого выражения true. Оператор логического отрицания ! не изменяет саму переменную found_one.
0
С чаем беда...
Эксперт CЭксперт С++
7912 / 3829 / 1053
Регистрация: 18.10.2014
Сообщений: 8,156
09.06.2017, 17:40 7
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
Если переменная found_one инициализируется, как false, то !found_one это true? Для чего ввели эти строки?
Если бы строка с проверкой !found_one располагалась сразу за строкой bool found_one = false;, то это было бы бессмысленно (почти).

Однако у вас в коде проверка !found_one располагается далеко от bool found_one = false;, да еще и внутри цикла. За это время - от bool found_one = false; до проверки !found_one - переменная found_one запросто успеет поменяться.

В такой ситуации почему вас удивляет эта проверка?

Добавлено через 2 минуты
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
Вопрос вот в чём

C++
1
if( !found_one )//то есть, если found_one==true..
Что за белиберда в комментарии? В условии сказано "если !found_one==true". Почему у вас вдруг пропало ! в комментарии?
0
29 / 6 / 0
Регистрация: 20.02.2016
Сообщений: 1,061
09.06.2017, 20:02  [ТС] 8
TheCalligrapher, подскажите, пожалуйста, что значит в этом фрагменте if(!found_one).
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.06.2017, 20:02

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Обьясните что это значит bool f=false;
#include &lt;iostream&gt; using namespace std; struct Aeroflot { char punkt_naznachenia; ...

Bool false/true и условие
bool changed; if(ui-&gt;check_budget-&gt;isChecked()) { if (changed==false) ...

bool lose = false; Даже при проигрыше, хотя должна быть true
При проверке Debug.Log(lose.ToString()); lose = false; Хотя при при столкновении с бомбой должно...

bool lose = false; Даже при проигрыше, хотя должна быть true
При проверке Debug.Log(lose.ToString()); lose = false; Хотя при при столкновении с бомбой должно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.