Форум программистов, компьютерный форум CyberForum.ru

Непонятность с if. - C++

Восстановить пароль Регистрация
 
cactus09
Чайник
 Аватар для cactus09
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
19.02.2012, 16:09     Непонятность с if. #1
Решил сделать некое подобие калькулятора с побитовыми операторами. Вводищ число, потом оператор (если ввел ~ (побитовое отрицание) то сразу выдает ответ), потом ввоищ 2-ое число и программа выдает ответ. Но возникла проблема с работой программы: ввожу число (i1), ввожу оператор ~ (ch), теперь программа должна ввывести ответ, но она просит ввести i2. Какя понимаю где-то ошибка в блоке if. Но что эта за ошибка.

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
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{
setlocale( LC_ALL,"" );
 
cout<<"& - побитовое И\n"<<
      "| -побитовое ИЛИ\n"<<
      "^ - побитовое исключающие ИЛИ\n"<<
      "< - побитовый здвиг влево\n"<<
      "> - побитовый здвиг вправо\n"<<
      "~ - побитовое отрицание (унарный)\n"<<endl;
      
int i1,i2;
char ch;
cin>>i1>>ch;
 
if(ch=='~'){i1=~i1;}
 
else{
 cin>>i2;
 if(ch=='&'){i1= i1&i2;;}
 if(ch=='<'){i1= i1>>i2;}
 if(ch=='>'){i1= i1<<i2;}
 if(ch=='^'){i1= i1^i2;}
 if(ch=='|'){i1= i1|i2;}}
 
 
cout<<i1<<endl;
 
  system("PAUSE");  
  return 0;
}
вместо else пробовал
C++
1
if(ch!='~'||ch!='<'||ch!='>');
- не помогает
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2012, 16:09     Непонятность с if.
Посмотрите здесь:

C# Непонятность со StopWatch
C++ Непонятность в маленьком кусочке кода
Delphi Непонятность с record
Непонятность в одной граф либе C++
Непонятность с неопределённостью.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
19.02.2012, 16:22     Непонятность с if. #2
У меня выводит ответ) По крайней мере не просит ввести i2
Миниатюры
Непонятность с if.  
cactus09
Чайник
 Аватар для cactus09
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
19.02.2012, 16:25  [ТС]     Непонятность с if. #3
Infinity3000, А чем ты пользуешся ? А то у меня Dev-C++ уже второй раз сталкиваюсь с багами, а VS неохота использовать - уж слишком мудренная .
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
19.02.2012, 16:26     Непонятность с if. #4
Цитата Сообщение от cactus09 Посмотреть сообщение
А чем ты пользуешся ?
MSVS 2010
soundtrack
 Аватар для soundtrack
41 / 41 / 4
Регистрация: 15.12.2011
Сообщений: 131
19.02.2012, 16:32     Непонятность с if. #5
Да, программа работает правильно. Я на этом форуме сижу около недели, и уже раз четвёртый сталкиваюсь с темами, где компилятор Dev-C++ ведёт себя неадекватно.
З.Ы. Infinity3000, я тоже почему-то в первый раз ввёл "3" для проверки Шаблонно мыслим, программисты...)
cactus09
Чайник
 Аватар для cactus09
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
19.02.2012, 16:36  [ТС]     Непонятность с if. #6
soundtrack, Ну а ты какю среду для програмирования порекомендовал бы?
soundtrack
 Аватар для soundtrack
41 / 41 / 4
Регистрация: 15.12.2011
Сообщений: 131
19.02.2012, 16:41     Непонятность с if. #7
Visual Studio 10 или 8, ну или Embarcadero RAD Studio 2010, если майкрософт считаешь замороченной. Но вообще я за первую, не знаю что тебе в ней кажется мудрёным...как по мне-очень удобно всё
cactus09
Чайник
 Аватар для cactus09
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
19.02.2012, 16:41  [ТС]     Непонятность с if. #8
Заметил такую веш - программа ведет себя неодыкватно. Если вводить переменную и нажимать enter потом оператор ~ и снова enter то она потребует ввести i2, а если ввести в одну строку i2 и ch и потом enter то i2 вводить не потребует и сразу выдаст ответ.
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
19.02.2012, 16:47     Непонятность с if. #9
Цитата Сообщение от cactus09 Посмотреть сообщение
Заметил такую веш - программа ведет себя неодыкватно. Если вводить переменную и нажимать enter потом оператор ~ и снова enter то она потребует ввести i2, а если ввести в одну строку i2 и ch и потом enter то i2 вводить не потребует и сразу выдаст ответ.
Я бы так не утверждал!
Миниатюры
Непонятность с if.  
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
19.02.2012, 16:52     Непонятность с if. #10
cactus09, пересоберите проект. на моем mingw gcc все адекватно как и следовало ожидать
cactus09
Чайник
 Аватар для cactus09
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
19.02.2012, 17:05  [ТС]     Непонятность с if. #11
Всё - разобрался. Зря грешил на Dev-C++(хотя насамом деле лагает). Виной всему моя невнимательность. Все прекрасно работает и у меня но только со стракой else. Если вместо else использовать
C++
1
if(ch!='~'||ch!='<'||ch!='>');
(как я и сделал в первый раз) то программа будет требоват i2 - вопрос только почему? Видь при вводе ~(ch) "ch!='~'||ch!='<'||ch!='>'" должно равняца fulse и действия в скобках if выполняца не будет - НО ОНО ВЫПОЛНЯЕТСЯ
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
19.02.2012, 17:07     Непонятность с if. #12
скиньте весь код! со всеми своими преобразованиями
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.02.2012, 17:10     Непонятность с if. #13
Цитата Сообщение от cactus09 Посмотреть сообщение
то программа будет требоват i2 - вопрос только почему?
Иф с пустой ветвью и брошенные от балды скобки от нечего.
cactus09
Чайник
 Аватар для cactus09
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
19.02.2012, 17:11  [ТС]     Непонятность с if. #14
Infinity3000, Да он посути весь и висит.

1) Не просит i2
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
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{
setlocale( LC_ALL,"" );
 
cout<<"& - ïîáèòîâîå È\n"<<
      "| - ïîáèòîâîå ÈËÈ\n"<<
      "^ - ïîáèòîâîå èñêëþ÷Г*ГѕГ№ГҐГҐ ÈËÈ\n"<<
      "< - ñäâèã âëåâî\n"<<
      "> - ñäâèã ГўГЇГ°Г*ГўГ®\n"<<
      "~ - ïîáèòîâîå îòðèöГ*Г*ГЁГҐ (ГіГ*Г*Г°Г*ûé)\n"<<endl;
      
int i1,i2;
char ch;
cin>>i1>>ch;
 
if(ch=='~'){i1=~i1;}
 
else{
 cin>>i2;
 if(ch=='&'){i1= i1&i2;;}
 if(ch=='<'){i1= i1>>i2;}
 if(ch=='>'){i1= i1<<i2;}
 if(ch=='^'){i1= i1^i2;}
 if(ch=='|'){i1= i1|i2;}}
 
 
cout<<i1<<endl;
 
  system("PAUSE");  
  return 0;
}
2) Просит i2
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
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{
setlocale( LC_ALL,"" );
 
cout<<"& - ïîáèòîâîå È\n"<<
      "| - ïîáèòîâîå ÈËÈ\n"<<
      "^ - ïîáèòîâîå èñêëþ÷Г*ГѕГ№ГҐГҐ ÈËÈ\n"<<
      "< - ñäâèã âëåâî\n"<<
      "> - ñäâèã ГўГЇГ°Г*ГўГ®\n"<<
      "~ - ïîáèòîâîå îòðèöГ*Г*ГЁГҐ (ГіГ*Г*Г°Г*ûé)\n"<<endl;
      
int i1,i2;
char ch;
cin>>i1>>ch;
 
if(ch=='~'){i1=~i1;}
 
if(ch!='~'||ch!='<'||ch!='>'){
 cin>>i2;
 if(ch=='&'){i1= i1&i2;;}
 if(ch=='<'){i1= i1>>i2;}
 if(ch=='>'){i1= i1<<i2;}
 if(ch=='^'){i1= i1^i2;}
 if(ch=='|'){i1= i1|i2;}}
 
 
cout<<i1<<endl;
 
  system("PAUSE");  
  return 0;
}
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.02.2012, 17:12     Непонятность с if. #15
Цитата Сообщение от cactus09 Посмотреть сообщение
должно равняца fulse и действия в скобках if выполняца не будет - НО ОНО ВЫПОЛНЯЕТСЯ
А какая разница, чему там оно у тебя равно?
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
19.02.2012, 17:12     Непонятность с if. #16
Цитата Сообщение от cactus09 Посмотреть сообщение
Видь при вводе ~(ch) "ch!='~'||ch!='<'||ch!='>'" должно равняца fulse
не верно.
при ch == '~' уже второе условие ch != '<' становится истинным, а значит и все условие if - истина.
поэтому
Цитата Сообщение от cactus09 Посмотреть сообщение
2) Просит i2

Не по теме:

Цитата Сообщение от cactus09 Посмотреть сообщение
хотя насамом деле лагает
99% жалоб на среду разработки, которые я видел на этом форуме - пустые и к среде разработки не имеют никакого отношения. внимательность, прямые руки, мозг - наше все

cactus09
Чайник
 Аватар для cactus09
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
19.02.2012, 17:14  [ТС]     Непонятность с if. #17
taras atavin, Если true - в {} действие выполняется, если fulse - в {} действие игнорируется
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.02.2012, 17:15     Непонятность с if. #18
Цитата Сообщение от cactus09 Посмотреть сообщение
taras atavin, Если true - в {} действие выполняется, если fulse - в {} действие игнорируется
C++
1
2
3
4
5
6
int i;
i=2;
if (i<1);
{
 cout<<"fdafdafdf"<<endl; // Игнорируется не действие, а условие
}
, так как здесь написано:
Код
целое i;
i=2;
если i<1, то выполнить пустой оператор // if и его условие относятся только к пустому оператору
начало составного оператора
вывести бредятину;
конец составного оператора
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
19.02.2012, 17:16     Непонятность с if. #19
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
         if(ch=='~')
    {
        i1 =~ i1;
    }
    else if(ch != '~'|| ch != '<' ||ch != '>')
    {
        cin >> i2;
        if(ch == '&')
        {
            i1 = i1 & i2;
        }
        if(ch == '<')
        {
            i1 = i1 >> i2;
        }
        if(ch == '>')
        {
            i1 = i1 << i2;
        }
        if(ch == '^') 
        {
            i1 = i1 ^ i2;
        }
        if(ch =='|')
        {
            i1 = i1 | i2;
        }
    }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2012, 17:27     Непонятность с if.
Еще ссылки по теме:

Непонятность с циклами C#
непонятность по теории C++
непонятность в условии и верен ли алгоритм C++

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

Или воспользуйтесь поиском по форуму:
cactus09
Чайник
 Аватар для cactus09
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
19.02.2012, 17:27  [ТС]     Непонятность с if. #20
Цитата Сообщение от taras atavin Посмотреть сообщение
C++
1
2
3
4
5
6
int i;
i=2;
if (i<1);
{
 cout<<"fdafdafdf"<<endl; // Игнорируется не действие, а условие
}
, так как здесь написано:
Код
целое i;
i=2;
если i<1, то выполнить пустой оператор // if и его условие относятся только к пустому оператору
начало составного оператора
вывести бредятину;
конец составного оператора
С этим у меня вопросов не возникает, если я ошибся где-то в собщении то уж извените, я всего лищ новичок.
Yandex
Объявления
19.02.2012, 17:27     Непонятность с if.
Ответ Создать тему
Опции темы

Текущее время: 23:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru