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

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

Войти
Регистрация
Восстановить пароль
 
marina11
1 / 1 / 0
Регистрация: 15.11.2012
Сообщений: 84
#1

Не работает операция switch-case - C++

19.02.2013, 02:29. Просмотров 568. Ответов 5
Метки нет (Все метки)

Программа должна переводить число от 0 до 255 в двоичную систему, побитово декодировать информацию об объекте и выводить её на экран. (например, для числа 123 должно быть:
1111011
Female
Senior
Long
Business
yes
)
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
#include "stdafx.h"
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
int main()
{
    char array[8];
    unsigned int c, i;
    printf("\n vvedite desyatichnoe chislo= ");
    scanf("%s", &array[0]);
    printf("\n dvoichnoe chislo=");
    for (i = 0; i < 8; i++)
    {
        c = atoi(array);
           printf("%hhd", ((c << i) >> 7) & 1);
    }
    switch (c>>7)
    {
        case 0: printf("\nMale ");
            break;
        case 1: printf("\nFemale ");
            break;
    }
    switch ((c<<1)>>6)
    {
        case 0: printf("child");
            break;
        case 1: printf("teenager");
            break;
        case 2: printf("adult");
            break;
        case 3: printf("senior");
            break;
    }
    if ((c<<7)==0)
    {
        switch ((c<<3)>>6)
        {
            case 0: printf("plumber");
                break;
            case 1: printf("president");
                break;
            case 2: printf("student");
                break;
            case 3: printf("tutor");
                break;
        }
        switch ((c<<5)>>6)
        {
            case 0: printf("sport");
                break;
            case 1: printf("classic");
                break;
            case 2: printf("busines");
                break;
            case 3: printf("hippie");
                break;
        }
    }
    else
    {
        switch ((c<<3)>>7)
        {
            case 0: printf("short");
                break;
            case 1: printf("long");
                break;
        }
        switch ((c<<4)>>6)
        {
            case 0: printf("sport");
                break;
            case 1: printf("classic");
                break;
            case 2: printf("busines");
                break;
            case 3: printf("hippie");
                break;
        }
        switch ((c<<6)>>7)
        {
            case 0: printf("no");
                break;
            case 1: printf("yes");
                break;
        }
    }
    return 0;
}
Проблема в том,что у меня не работают switch в том месте, где я использую if/else. Программа выводит надписи на экран только с первых двух switch'ей и больше ничего.Подскажите,в чем ошибка?Может не так делаю перевод числа из СС?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2013, 02:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не работает операция switch-case (C++):

Оптимальная конструкция switch-case-while / while-switch-case - C++
Имеется конструкция типа: switch() { case 1: while() { ... }

Switch case внутри switch case - C++
Привет всем! Нужна помощь. Пишу калькулятор с консольным меню. Так вот, используется цикл while, внутри которого у меня switch...

switch-case, как писать в самом case - C++
Такс дело вот в чём,прога работает всё хорошо,вот только мне не нравится как записваю страны в кейсе,можно ли каким-нибудь образом писать в...

операция switch - C++
switch(c)//char c=f.get() { case ' ': ne=true; break; case '\t': ne=true; break; break; case '\n': ne=true; case EOF:

switch i case - C++
v 4jom u menja o6ibka? i kak vivisti rezultat? # include &lt;iostream&gt; # include &lt;conio.h&gt; using namespace std; int main () ...

switch и case - C++
Пишет, что switch не содержит case, но судя по коду - это не так... как же заставить его видеть этот case? #include &lt;iostream&gt; ...

5
UVEN
3 / 3 / 0
Регистрация: 19.02.2013
Сообщений: 26
19.02.2013, 05:16 #2
Проблема вот в чем ...
Ваша программа показывает число 123 как 01111011
"Female" выводиться в том случае, когда переменная c равна 1, но при сдвиге на 7 у вас получается 0, поэтому на экран отобразиться надпись "male".. Должно быть (c>>6) а не (c>>7)

Далее надпись "long" будет при ((c<<3)>>9)
Надпись Business будет при (c>>6)<<1
Надпись yes будет при (c<<6)>>12

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
#pragma hdrstop
#pragma argsused
 
#include <tchar.h>
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
    char array[8];
    unsigned int c, i;
    printf("\n vvedite desyatichnoe chislo= ");
    scanf("%s", &array[0]);
    printf("\n dvoichnoe chislo=");
    for (i = 0; i < 8; i++)
    {
        c = atoi(array);
           printf("%hhd", ((c << i) >> 7) & 1);
    }
    switch (c>>6)
    {
        case 0: printf("\nMale ");
            break;
        case 1: printf("\nFemale ");
            break;
    }
 
    switch ((c<<1)>>6)
    {
        case 0: printf("child");
            break;
        case 1: printf("teenager");
            break;
        case 2: printf("adult");
            break;
        case 3: printf("senior");
            break;
    }
 
    if ((c<<7)==0)
    {
        switch ((c<<3)>>6)
        {
            case 0: printf("plumber");
                break;
            case 1: printf("president");
                break;
            case 2: printf("student");
                break;
            case 3: printf("tutor");
                break;
        }
        switch ((c<<5)>>6)
        {
            case 0: printf("sport");
                break;
            case 1: printf("classic");
                break;
            case 2: printf("busines");
                break;
            case 3: printf("hippie");
                break;
        }
    }
    else
    {
 
        switch ((c<<3)>>9)
        {
            case 0: printf("short");
                break;
            case 1: printf("long");
                break;
        }
 
        switch ((c>>6)<<1)
        {
            case 0: printf("sport");
                break;
            case 1: printf("classic");
                break;
            case 2: printf("busines");
                break;
            case 3: printf("hippie");
                break;
        }
 
        switch ((c<<6)>>12)
        {
            case 0: printf("no");
                break;
            case 1: printf("yes");
                break;
        }
    }
    return 0;
}
switch работают как всегда... Проблема в том что значения с битовым смещением переменной c не попадают под case
0
marina11
1 / 1 / 0
Регистрация: 15.11.2012
Сообщений: 84
19.02.2013, 09:29  [ТС] #3
Цитата Сообщение от UVEN Посмотреть сообщение
Далее надпись "long" будет при ((c<<3)>>9)
Надпись Business будет при (c>>6)<<1
Надпись yes будет при (c<<6)>>12
Не получается всё равно...А разве когда сдвигаем на 9 или 12 все не обнуляется?(8 же битов)Или я чего-то не понимаю..
0
Байт
Эксперт C
16144 / 10422 / 1552
Регистрация: 24.12.2010
Сообщений: 19,730
19.02.2013, 10:15 #4
marina11, Могу вам посоветовать выводить промежуточные результаты сдвигов. Типа
C
1
2
3
4
5
6
 unsigned int cx;
....
cx = ((c<<3) >> 7);
printf("cx=%x\n", cx);
if (cx==0) ...
switch cx...
1
marina11
1 / 1 / 0
Регистрация: 15.11.2012
Сообщений: 84
19.02.2013, 14:54  [ТС] #5
Цитата Сообщение от Байт Посмотреть сообщение
выводить промежуточные результаты сдвигов
Спасибо за идеютеперь бы разобраться в сдвигах
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
19.02.2013, 15:00 #6
Цитата Сообщение от marina11 Посмотреть сообщение
Не получается всё равно...А разве когда сдвигаем на 9 или 12 все не обнуляется?(8 же битов)Или я чего-то не понимаю..
8 битов в байте. И то не в любом. А у Вас unsigned int. Т.е. скорее всего 32 бита.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2013, 15:00
Привет! Вот еще темы с ответами:

Switch-case - C++
Можно ли так писать? switch (simvol) { case (('(') or ('1') or ('2') or ('3') or ('4') or ('5') or ('6') or ('7') or ('8')...

Switch - case - C++
Обязательно с использованием классов Есть задача. Дан массив вещественных чисел. а) Ко всем отрицательным элементам прибавить элемент...

Switch - Case - C++
Составить программу, определяющую результат гадания на ромашке («любит–не любит– плюнет–поцелует–к сердцу прижмёт–к чёрту пошлёт»), взяв...

Switch + case - C++
Суть задания: Задан шифр книги из библиотеки в виде шестизначного целого числа. Определить к какому подразделу ...


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
19.02.2013, 15:00
Ответ Создать тему
Опции темы

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