С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.65
csrnsdrfg
1 / 1 / 0
Регистрация: 09.01.2012
Сообщений: 7
#1

Как работает оператор if? - C++

10.01.2012, 19:18. Просмотров 3105. Ответов 22
Метки нет (Все метки)

Народ!
Операция сравнения возвращает ЧИСЛО, т.е. while и if принимают ЧИСЛО (0 - false, etc - true).
Вопрос 1) Почему нельзя записать так:
while ( if (3) );
Я этим хочу сказать следующее:
1) Проверяем истинность выражения в скобках while
2) Натыкаемся на if, проверяем истинность (ведь, я если б я туда поставил выражение: "5+3", он бы сначала посчитал его, потом сравнил)
3) if Возвращает true (3 - true)
4) Выражение в скобках while - true. Начинаем цикл
5) Тело цикла - пустой оператор. Возвращаемся к началу.
Вопрос 2) Как устроен оператор if? Прошу серьезно отнестись к вопросу. Ответы типа: "проверяет истинность. Возвращает число" и т.п. не принимаются.
Хочу услышать разумный ответ. Комп не понимает операции "проверить истинность". КАК ПРОИСХОДИТ эта самая проверка? Желательно максимально подробно.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2012, 19:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как работает оператор if? (C++):

Как работает оператор new? - C++
Обязательно ли использовать оператор delete в коде (см.ниже.).После использования оператора new старая область память выделенная для pStr...

Как работает оператор switch? - C++
Shape* generator() { switch(rand() % 3) { case 0: return new Triangle; case 1: return new Rectangle; case 2: return new...

Как работает оператор char *? - C++
Как работает оператор char *! Можете описать его принцип работы! Спасибо заранее!

Как работает оператор typedef - C++
как работает оператор typedef если есть у кого сам код то пришлите,интересно:)

Как работает тернарный оператор - C++
Здравствуйте. Объясните, пожалуйста, что значит эта строка color = (color == 'W') ? 'B' : 'W';

Как работает оператор new, он же _Znwj на асме - C++
Собственно как действительно он работает? То есть что реально происходит какие инструкции (грубо говоря) он выполняет? Откуда проц (в...

22
DebieCooper
34 / 34 / 1
Регистрация: 12.10.2011
Сообщений: 296
10.01.2012, 19:34 #2
А в чём проблема?
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
10.01.2012, 19:37 #3
Потому, что if() без тела не отработает.
Точнее отработает, но вот так "if(3);", что никакой смысловой нагрузки не несет.

А сам по себе if ничего не возвращает. С какой радости у вас while(if(3)) должно отработать?
0
TamTam
18 / 18 / 1
Регистрация: 28.12.2011
Сообщений: 176
10.01.2012, 19:41 #4
А что, если вы писали 5+3, то работало?)

После ифа должно быть выражение, истиность или ложность которого оно возвращает. если гдето раньше 3 присвоили true (хотя так вроде нельзя), то должно быть напр 3 = true, ну или 3 = 3.

А 0 - false это общее обозначение. Так можно в алгоритмах писать, и может на ассемблерах каких.

И где это у нас etc - true, никогда не встречалось, только 1 - true (система то двоичная, ничего другого и нет)
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
10.01.2012, 19:43 #5
Цитата Сообщение от TamTam Посмотреть сообщение
После ифа должно быть выражение, истиность или ложность которого оно возвращает
Куда оно возвращает?
0
rangerx
1937 / 1546 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
10.01.2012, 19:45 #6
1) Оператор if ничего не возвращает, он всего лишь проверяет истинность условия.
2) Достаточно открыть любую книгу по ассемблеру и прочитать про команды условного перехода.
0
TamTam
18 / 18 / 1
Регистрация: 28.12.2011
Сообщений: 176
10.01.2012, 19:47 #7
проверяет, проверяет. не возвращает
0
csrnsdrfg
1 / 1 / 0
Регистрация: 09.01.2012
Сообщений: 7
10.01.2012, 19:49  [ТС] #8
Да, спасибо. Третий пункт мой затуп. Можно теперь про if конкретно инфу получить?
0
TamTam
18 / 18 / 1
Регистрация: 28.12.2011
Сообщений: 176
10.01.2012, 19:57 #9
if ( выражение )
оператор_1;
else
оператор_2;


часть else может и отсутствовать. Сначала вычисляется "выражение" в скобках; если оно истинно то выполняется оператор_1. Если "выражение" ложно, то оператор_1 пропускается, а выполняется оператор_2. Если на месте условно выполняемых операторов должна располагаться группа из нескольких операторов языка, то они заключаются в фигурные скобки - { }.
0
csrnsdrfg
1 / 1 / 0
Регистрация: 09.01.2012
Сообщений: 7
10.01.2012, 20:02  [ТС] #10
TamTam, я это все знаю.
Ты мне лучше скажи, как просходит само определение истинности? Как комп понимает, что !(PI>8.35) - true??????

Добавлено через 2 минуты
По теме еще один вопрос...
Почему нельзя писать так: while (ch = getchar != EOF) ...

Операция сравнения имеет больший приоретет, чем присваивание. Я понимаю, что этим хитрожопно присваиваю значение 1 (в случае getchar () != [ctrl +z]) или 0 (в остальных случаях). Но все-таки, почему компилятор распознает это как ошибку?
0
DebieCooper
34 / 34 / 1
Регистрация: 12.10.2011
Сообщений: 296
10.01.2012, 20:03 #11
Полная форма предложения if выглядит так:
if(выражение) предложение;
else предложение;

Общая форма с использованием блоков выглядит так:
if(выражение)
{
последовательность предложений
}
else
{
последовательность предложений
}

Простой пример. Знаменитая программа "Магическое число"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <csdlib>
using namespace std;
 
int main()
{
    int magic; // магическое число
    int guess; // догадка пользователя
 
    magic = rand(); // полчим случайное число
 
    cout << "Вводите вашу догадку: ";
    cin >> guess;
 
    if(guess == magic) cout << "** Правильно **";
 
    return 0;
}
Надеюсь чем-нибудь помог вам.
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
10.01.2012, 20:09 #12
К словам rangerx, код
cpp
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
int main()
{
    int a = 5;
    if(a > 0)
        std::cout << "positive" << std::endl;
    else
        std::cout << "negative" << std::endl;
}
и куски из
asm
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
.LC0:
    .string "positive"
.LC1:
    .string "negative"
;...
    movl    $5, 28(%esp)
    cmpl    $0, 28(%esp)
    jle .L2
    movl    $.LC0, 4(%esp)
;...
.L2:
    movl    $.LC1, 4(%esp)
;...
Как комп понимает, что !(PI>8.35) - true??????
Он просто сравнивает 2 числа и в зависимости от результата либо "прыгает" по метке, либо нет.

Добавлено через 5 минут
Цитата Сообщение от csrnsdrfg Посмотреть сообщение
while (ch = getchar != EOF)
Может не getchar а getchar() все-таки?
1
TamTam
18 / 18 / 1
Регистрация: 28.12.2011
Сообщений: 176
10.01.2012, 20:52 #13
экий вы въедливый) Дело в том, что язык си - это не машинный язык. Перед тем, как комп что-либо поймет все это ему переведут.
0
BRcr
4010 / 2299 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
10.01.2012, 21:03 #14
Цитата Сообщение от csrnsdrfg Посмотреть сообщение
Почему нельзя писать так: while (ch = getchar != EOF) ...
Еще как можно
Просто правильно писать надо, а сообщениям компилятора внимать и делать выводы...
C++
1
2
3
4
5
bool ch;
while( ch = ( getchar( ) != EOF ) ){
  if( ch ) cout<< "true";
  else cout<< "false";
}
0
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
10.01.2012, 21:19 #15
soon,

Не по теме:

Можете подсказать как/чем вы вытаскиваете asm-код?

0
10.01.2012, 21:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2012, 21:19
Привет! Вот еще темы с ответами:

Уточнение о том как работает оператор for - C++
Я правильно понимаю? Оператор for, сперва будет работать только с первым выражением до тех пор, пока оно не станет ложным не переходя ко...

Как работает оператор cout и return? - C++
Допустим есть функция: int show() { int g = 5; cout &lt;&lt; (g&gt;7)?1:2; return g&gt;7?1:2; }return на выражение g&gt;7?1:2...

Поясните как работает постфиксный и префиксный оператор на примере - C++
Здравствуйте. Здесь префиксный понятно, а что если изменить на постфиксный, как код будет работать? vector&lt;int&gt;::size_type...

Не работает оператор if - C++
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #pragma hdrstop #include &lt;math.h&gt; ...


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

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

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