Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2013, 09:17   #1
marina12
Пользователь
 
Регистрация: 13.02.2013
Сообщений: 28
По умолчанию Ошибка в операции побитового сдвига

Программа должна переводить число от 0 до 255 в двоичную систему, побитово декодировать информацию об объекте и выводить её на экран. (например, для числа 123 должно быть:
0 11 11 01 1

0-male
11-senior
11-tutor
01-classic

Код:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
int main()
{
	char array[8];
    unsigned int c, i,r;
    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'ей и больше ничего.Подскажите,в чем ошибка?Я неправильно сдвигаю или может не так делаю перевод числа из СС?
marina12 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ Операция побитового сдвига marina12 Помощь студентам 3 16.02.2013 10:36
Тело сдвига Abur Фриланс 2 08.01.2011 19:11
С++Робота со строками и файловые операции((Где же ошибка??? Scarletred Помощь студентам 0 24.05.2010 03:58
операции сдвига ssvd Общие вопросы C/C++ 2 04.11.2009 08:13
Операция сдвига? SkyDreamer Общие вопросы C/C++ 3 10.10.2007 08:20