Ввод символов (тип char) в динамический массив - C (СИ)
Формулировка задачи:
Коллеги! Прошу помочь!
Создаю символьный динамический массив (выделяю под него память). С клавиатуры задаю его размерность, а потом пытаюсь заполнить его с помощью написанной мной стандартной функции и функции getchar(), но в массив вводится в два раза меньше элементов чем было предусмотрено при его создании. В чём причина?
#include <stdio.h>
#include <stdlib.h>
char* vvod_1char (char*x, int n)
{
for (int i=0;i<n;i++)
{x[i]=getchar();}
return x;
}
void print (char*x, int n)
{
for (int i=0;i<n;i++)
printf("%c ",x[i]);
printf("\r\n");
}
void main (void)
{
int n,m,i=0;
printf("%s\r\n","Enter size Universum");
scanf ("%i",&n);
char* Universum=(char*) malloc(n*sizeof(char));
for (i=0;i<n;i++)
Universum[i]=0;
printf("%s\r\n","Enter Universum");
vvod_1char(Universum,n);
print(Universum,n);
return ;
}Решение задачи: «Ввод символов (тип char) в динамический массив»
textual
Листинг программы
void vvod_1char (char*x, int n)
{
for (int i=0;i<n;i++) {
int c=getchar();
if (c=='\n') i--;
else x[i]=c;
}
}
Объяснение кода листинга программы
- Ввод данных осуществляется с помощью функции getchar(), которая считывает один символ из стандартного ввода.
- Функция vvod_1char() принимает два аргумента: указатель на первый элемент динамического массива x и целое число n.
- В цикле for происходит считывание символов из стандартного ввода до тех пор, пока не будет достигнут символ новой строки '\n'.
- Если считанный символ является символом новой строки, то значение переменной i уменьшается на единицу, чтобы пропустить символ новой строки при записи в массив.
- Если считанный символ не является символом новой строки, то он записывается в массив x по индексу i.
- Значение переменной n используется для контроля количества считываемых символов.
- Результатом работы функции является заполнение динамического массива x символами, введенными пользователем.