Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
Чайник
 Аватар для cactus09
70 / 70 / 9
Регистрация: 15.02.2012
Сообщений: 475

Непонятность с if.

19.02.2012, 16:09. Показов 1309. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решил сделать некое подобие калькулятора с побитовыми операторами. Вводищ число, потом оператор (если ввел ~ (побитовое отрицание) то сразу выдает ответ), потом ввоищ 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!='>');
- не помогает
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.02.2012, 16:09
Ответы с готовыми решениями:

Непонятность со StopWatch
// The first execution time will be tossed // out, since it can skew the average time. Взято из примера Msdn...

Непонятность с циклами
Не работает return (в if в конце). Функци (Plus, Minus и т. д.) я делал сам. Кто-нибудь знает почему? int main() { cout &lt;&lt;...

Непонятность с неопределённостью.
Здравствуйте! В книжке предел \lim_{x\rightarrow \frac{\pi }{2}}\frac{\ln \sin x}{\cot x} находится по правилу Лопиталя и...

19
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
19.02.2012, 16:22
У меня выводит ответ) По крайней мере не просит ввести i2
Миниатюры
Непонятность с if.  
1
Чайник
 Аватар для cactus09
70 / 70 / 9
Регистрация: 15.02.2012
Сообщений: 475
19.02.2012, 16:25  [ТС]
Infinity3000, А чем ты пользуешся ? А то у меня Dev-C++ уже второй раз сталкиваюсь с багами, а VS неохота использовать - уж слишком мудренная .
0
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
19.02.2012, 16:26
Цитата Сообщение от cactus09 Посмотреть сообщение
А чем ты пользуешся ?
MSVS 2010
1
 Аватар для soundtrack
42 / 42 / 12
Регистрация: 15.12.2011
Сообщений: 131
19.02.2012, 16:32
Да, программа работает правильно. Я на этом форуме сижу около недели, и уже раз четвёртый сталкиваюсь с темами, где компилятор Dev-C++ ведёт себя неадекватно.
З.Ы. Infinity3000, я тоже почему-то в первый раз ввёл "3" для проверки Шаблонно мыслим, программисты...)
1
Чайник
 Аватар для cactus09
70 / 70 / 9
Регистрация: 15.02.2012
Сообщений: 475
19.02.2012, 16:36  [ТС]
soundtrack, Ну а ты какю среду для програмирования порекомендовал бы?
0
 Аватар для soundtrack
42 / 42 / 12
Регистрация: 15.12.2011
Сообщений: 131
19.02.2012, 16:41
Visual Studio 10 или 8, ну или Embarcadero RAD Studio 2010, если майкрософт считаешь замороченной. Но вообще я за первую, не знаю что тебе в ней кажется мудрёным...как по мне-очень удобно всё
1
Чайник
 Аватар для cactus09
70 / 70 / 9
Регистрация: 15.02.2012
Сообщений: 475
19.02.2012, 16:41  [ТС]
Заметил такую веш - программа ведет себя неодыкватно. Если вводить переменную и нажимать enter потом оператор ~ и снова enter то она потребует ввести i2, а если ввести в одну строку i2 и ch и потом enter то i2 вводить не потребует и сразу выдаст ответ.
0
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
19.02.2012, 16:47
Цитата Сообщение от cactus09 Посмотреть сообщение
Заметил такую веш - программа ведет себя неодыкватно. Если вводить переменную и нажимать enter потом оператор ~ и снова enter то она потребует ввести i2, а если ввести в одну строку i2 и ch и потом enter то i2 вводить не потребует и сразу выдаст ответ.
Я бы так не утверждал!
Миниатюры
Непонятность с if.  
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
19.02.2012, 16:52
cactus09, пересоберите проект. на моем mingw gcc все адекватно как и следовало ожидать
0
Чайник
 Аватар для cactus09
70 / 70 / 9
Регистрация: 15.02.2012
Сообщений: 475
19.02.2012, 17:05  [ТС]
Всё - разобрался. Зря грешил на Dev-C++(хотя насамом деле лагает). Виной всему моя невнимательность. Все прекрасно работает и у меня но только со стракой else. Если вместо else использовать
C++
1
if(ch!='~'||ch!='<'||ch!='>');
(как я и сделал в первый раз) то программа будет требоват i2 - вопрос только почему? Видь при вводе ~(ch) "ch!='~'||ch!='<'||ch!='>'" должно равняца fulse и действия в скобках if выполняца не будет - НО ОНО ВЫПОЛНЯЕТСЯ
0
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
19.02.2012, 17:07
скиньте весь код! со всеми своими преобразованиями
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
19.02.2012, 17:10
Цитата Сообщение от cactus09 Посмотреть сообщение
то программа будет требоват i2 - вопрос только почему?
Иф с пустой ветвью и брошенные от балды скобки от нечего.
0
Чайник
 Аватар для cactus09
70 / 70 / 9
Регистрация: 15.02.2012
Сообщений: 475
19.02.2012, 17:11  [ТС]
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;
}
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
19.02.2012, 17:12
Цитата Сообщение от cactus09 Посмотреть сообщение
должно равняца fulse и действия в скобках if выполняца не будет - НО ОНО ВЫПОЛНЯЕТСЯ
А какая разница, чему там оно у тебя равно?
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
19.02.2012, 17:12
Цитата Сообщение от cactus09 Посмотреть сообщение
Видь при вводе ~(ch) "ch!='~'||ch!='<'||ch!='>'" должно равняца fulse
не верно.
при ch == '~' уже второе условие ch != '<' становится истинным, а значит и все условие if - истина.
поэтому
Цитата Сообщение от cactus09 Посмотреть сообщение
2) Просит i2

Не по теме:

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

1
Чайник
 Аватар для cactus09
70 / 70 / 9
Регистрация: 15.02.2012
Сообщений: 475
19.02.2012, 17:14  [ТС]
taras atavin, Если true - в {} действие выполняется, если fulse - в {} действие игнорируется
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
19.02.2012, 17:15
Цитата Сообщение от cactus09 Посмотреть сообщение
taras atavin, Если true - в {} действие выполняется, если fulse - в {} действие игнорируется
C++
1
2
3
4
5
6
int i;
i=2;
if (i<1);
{
 cout<<"fdafdafdf"<<endl; // Игнорируется не действие, а условие
}
, так как здесь написано:
Code
1
2
3
4
5
6
целое i;
i=2;
если i<1, то выполнить пустой оператор // if и его условие относятся только к пустому оператору
начало составного оператора
вывести бредятину;
конец составного оператора
0
 Аватар для Infinity3000
1066 / 583 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
19.02.2012, 17:16
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;
        }
    }
0
Чайник
 Аватар для cactus09
70 / 70 / 9
Регистрация: 15.02.2012
Сообщений: 475
19.02.2012, 17:27  [ТС]
Цитата Сообщение от taras atavin Посмотреть сообщение
C++
1
2
3
4
5
6
int i;
i=2;
if (i<1);
{
 cout<<"fdafdafdf"<<endl; // Игнорируется не действие, а условие
}
, так как здесь написано:
Code
1
2
3
4
5
6
целое i;
i=2;
если i<1, то выполнить пустой оператор // if и его условие относятся только к пустому оператору
начало составного оператора
вывести бредятину;
конец составного оператора
С этим у меня вопросов не возникает, если я ошибся где-то в собщении то уж извените, я всего лищ новичок.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.02.2012, 17:27
Помогаю со студенческими работами здесь

непонятность по теории
что означает статическая переменная? она как локальная только не стирается после окончания функции? или как?

Непонятность с циклами
using System; class aaa { static void Main() { int x, y; string a; ...

Непонятность с record
Здравствуйте! Нужно создать некую структуру, типа древовидной (есть проект, состоящий из нескольких зданий, в зданиях есть помещения, в...

Непонятность со ссылками
Есть некое поле формы с кодом обработчиком php, в случае успешного заполнения этой формы я перебрасываю пользователя на страницу которая...

Непонятность по графикам (плоскостям)
Приветствую. Для начала напишу задание, далее будет вопрос. Создайте текстовый файл, содержащий в пространстве XYZ &lt;,,&gt; по N...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru