Ввод символов (тип 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 символами, введенными пользователем.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д