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