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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2017, 06:26   #1
Серега_123
 
Регистрация: 04.06.2017
Сообщений: 3
По умолчанию Создать массив разнотипных данных на Си

Всем привет!
Задача: есть динамический массив байтов (byte), пользователь заполняет его с клавиатуры разнотипными данными: целое (int), длинное целое (long), вещественное (double). Перед каждым значением в массив записывается байт с кодом. Перед целым с кодом 1, перед длинным целым с кодом 2, перед вещественным 3. После заполнения массива необходимо на экран вывести сумму байт кодов и саму последовательность разнотипных данных.
Ниже представлен мой код. У меня проблемы с выводом последовательности на экран. Он как то коряво ее выводит. И после вывода еще ошибку выдает.
Я сделал смещение переменной j после записи int на 3, после long на 3 и после double на 7. В целом выводит всю последовательность кроме нулевого элемента, т. е при выводе первый элемент не выводится, а дальше нормально Прошу содействия и участия! Реализация:
Код:
 #include <stdio.h>
 #include <stdlib.h>

 typedef char byte;

 void my_func()
 {
 int N = 10;
 char ch;
 byte *A = (byte*)malloc(N*2*sizeof(byte));
 int *i; long *l; double *d;
 i = (int*)A; l = (long*)A; d = (double*)A;
 int j = 0;
 int k = 0;
 int count = 0;
 while (k<N)
 {
 scanf("%c", &ch);
 if (ch == 'i')
 {
 int x;
 byte a = 1;
 scanf("%d", &x);
 *(A + j++) = a;
 *(i + j++) = x;
 count += (int)a;
 k++; j+=3; 
 } 
 else if (ch == 'l')
 {
 long y;
 byte a = 2;
 scanf("%ld", &y);
 *(A + j++) = a;
 *(l + j++) = y;
 count += (int)a;
 k++; j+=3;
 }
 else if (ch == 'd')
 {
 double z;
 byte a = 3;
 scanf("%lf", &z);
 *(A + j++) = a;
 *(d + j++) = z;
 count += (int)a;
 k++; j+=7;
 }
 }
 printf("%c", '\n');
 printf("%d\n", count);
 printf("%c", '\n');
 for (int p = 0; p < j+1; p++)
 {
 if (*(A + p) == 1)
 {
 printf("%d ", *(A + p));
 printf("%d ", *(i + p + 1));
 printf("%c", '\n');
 }

 else if (*(A + p) == 2)
 {
 printf("%d ", *(A + p));
 printf("%ld ", *(l + p + 1));
 printf("%c", '\n');
 }
 else if (*(A + p) == 3)
 {
 printf("%d ", *(A + p));
 printf("%.2lf ", *(d + p + 1));
 printf("%c", '\n');
 }
 }
 }
 int main()
 {
 my_func();


 system("PAUSE");
 return 0;
 }
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 17.10.2017 в 09:51.
Серега_123 вне форума Ответить с цитированием
Старый 17.10.2017, 22:33   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

https://www.tutorialspoint.com/online_c_formatter.htm
0.jpg
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 17.10.2017 в 22:41.
min@y™ вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
GPSS. Моделирование разнотипных заявок. delgadoo Помощь студентам 4 25.01.2016 12:56
Создать массив. Получить новый массив как произведение каждого элемента на заданное число. Найти максимальное (на Liberty Basic) MickeyAttac Помощь студентам 2 02.12.2014 22:55
Программирование в VBA: двумерный массив M на N, нужно создать новый одномерный массив TheAnnihilyator Помощь студентам 1 04.06.2014 09:16
объединить несколько разнотипных файлов excel в одну книгу, один лист tatianalug Помощь студентам 0 01.02.2012 18:39
Создать двоичный файл, записать n целых чисел. Из файла создать массив, элементы числа-палиндромы (на C) Simak63 Помощь студентам 0 30.03.2011 21:06