Размещение данных в статическом массиве байтов фиксированной размерности с контролем переполнения - 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(), что может привести к возникновению неопределенного поведения.