Размещение данных в статическом массиве байтов фиксированной размерности с контролем переполнения - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет. С лабой 3 не могу сообразить. Разработать две функции, одна из которых вводит с клавиатуры набор данных в произвольной последовательности и размещает в памяти в переменном формате. Другая функция читает эти данные и выводит на экран. Программа запрашивает и размещает в памяти несколько наборов данных при помощи первой функции, а затем читает их и выводит на экран при помощи второй. Размещение данных производить в статическом массиве байтов фиксированной размерности с контролем его переполнения. Вариант 10 10. Произвольная последовательность строк и целых переменных. Байт со значением 0 - обозначает начало строки (последовательность символов, ограниченная нулем). Байт со значением N является началом последовательности N целых чисел. Конец последовательности - два нулевых байта. Помогите, пожалуйста!
Вот код лабы 3
#include <stdio.h>
#include <conio.h>
#define N 100
 
char a[N];
 
void input();
void print();
 
void input()
{
    int i;
    for (i = 0; i <= N; i++)
    {
        printf("Enter string and number: ");
            scanf_s("%s", a[i]);
            if (i == N)
            {
                printf("Array is full.");
            }
    }
}
 
void print()
{
    int i;
    for (i = 0; i <= N; i++)
    {
        printf("%s", a[i]);
    }
}
 
void main()
{
    
    input();
    print();
 
    _getch();
}
Где тут ошибки? И как правильно.

Решение задачи: «Размещение данных в статическом массиве байтов фиксированной размерности с контролем переполнения»

textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#define N 100
 
char A[N];
int *a;
int i;
char *str;
 
 
void input();
void print();
 
void main()
{
    input();
    print();
 
    _getch();
}
 
void input()
{
for(i = 0, a = (int*)A; i < N/sizeof(int); i++)
{
    a[i] = (int)i;
    printf("Enter string and number: ");
    scanf_s("%d", &a[i]);
}
 
for(; str[i] != 0; i++)
{
    scanf_s("%c", &str[i]);
}
}
 
void print()
{
    for(i = 0; i < N; i++)
    {
        printf("%d ", a[i], "%s", str[i]);
    }
}

Объяснение кода листинга программы

  1. Объявление переменных:
    • char A[N]; Объявление статического массива байтов (строки) фиксированной размерности N.
    • int *a; Указатель на первый элемент статического массива int (предполагается, что int занимает 4 байта).
    • int i; Переменная для контроля переполнения (предполагается, что 4 байта).
    • char *str; Указатель на первый элемент статического массива строки (предполагается, что строка занимает 1 байт).
  2. Объявление функций:
    • void input(); Функция для ввода данных в статический массив.
    • void print(); Функция для вывода данных из статического массива.
  3. В функции main() выполняются следующие действия:
    • Вызов функции input(); Ввод данных в статический массив.
    • Вызов функции print(); Вывод данных из статического массива.
  4. В функции input() выполняются следующие действия:
    • Цикл for для заполнения статического массива int.
    • Считывание строки и числа с помощью функции scanf_s().
  5. В функции print() выполняются следующие действия:
    • Цикл for для вывода данных из статического массива.
    • Вывод значения int и строки с помощью функции printf().
  6. В конце программы вызывается функция _getch() для приостановки выполнения программы до тех пор, пока пользователь не нажмет клавишу. Обратите внимание, что данный код не проверяет успешность выполнения функций scanf_s() и printf(), что может привести к возникновению неопределенного поведения.

Оцени полезность:

14   голосов , оценка 4.286 из 5
Похожие ответы