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