Как сделать так чтобы массив считал/менял при нажатие буквы? - C (СИ)
Формулировка задачи:
я вроде освоил работу с массивами и применяю ее во всех заданиях какие есть у меня.только мне всегда приходится вводить начальное число массива и только потом действия.а как чтобы не надо было вводить колво элементов в начале?вот к примеру .и дальше там разные действия я применял(сортировал/считал/ариф.прог и т.д)так вот помогите пожалуйста как заменить колво элементов в к примеру любой буквой или enter?
#include <stdio.h> int main(void) {int mass[256],i,n; printf("N=");scanf("%d",&n); for (i=0;i<n;i++){ printf("x[%d]=",i); scanf("%d",&mass[i]);} for (i=0;i<n;i++){ printf("%d\t",mass[i]);} }
Решение задачи: «Как сделать так чтобы массив считал/менял при нажатие буквы?»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <ctype.h> int main(void) { size_t size = 0; // текущий размер size_t space = 1; // сколько всего доступно места int* arr = malloc(size*sizeof(int)); int ch; while((ch=getchar())!='\n') { if (!isdigit(ch)) continue; ungetc(ch, stdin); // если число, возвращаем символ в поток scanf("%d", &ch); if (space == size) { space *= 2; // что бы часто не делать realloc arr = realloc(arr, space*sizeof(int)); } arr[size++] = ch; } for(size_t i = 0; i < size; i++) printf("%d ", arr[i]); return 0; }
Объяснение кода листинга программы
В этом коде выполняется следующая последовательность действий:
- Подключаются необходимые библиотеки
- Инициализируются две переменные: size (текущий размер массива) и space (общее количество доступного места). Обе переменные инициализируются нулями.
- Выделяется память под массив. Для этого используется функция malloc, которой передается размер в байтах (так как scanf записывает в массив указателей, а не в массив int). Размер в байтах равен произведению size на sizeof(int).
- В цикле while считывается ввод пользователя. Если считанный символ не является числом (проверка isdigit), то цикл продолжает считывать следующий символ. Если считанное число, то оно считывается в переменную ch, а затем возвращается в поток ввода с помощью функции ungetc. Это нужно для корректного считывания последующего ввода.
- Если размер массива (size) равен общему количеству доступного места (space), то размер double-удваивается, чтобы выделить больше места под массив. Затем с помощью функции realloc изменяется размер массива.
- Считанное число записывается в массив. Переменная size увеличивается на единицу.
- После окончания цикла while выводится на экран весь массив.
- Программа возвращает 0, что означает успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д