Как сделать так чтобы массив считал/менял при нажатие буквы? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

я вроде освоил работу с массивами и применяю ее во всех заданиях какие есть у меня.только мне всегда приходится вводить начальное число массива и только потом действия.а как чтобы не надо было вводить колво элементов в начале?вот к примеру .
#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]);}
}
и дальше там разные действия я применял(сортировал/считал/ариф.прог и т.д)так вот помогите пожалуйста как заменить колво элементов в к примеру любой буквой или enter?

Решение задачи: «Как сделать так чтобы массив считал/менял при нажатие буквы?»

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;
}

Объяснение кода листинга программы

В этом коде выполняется следующая последовательность действий:

  1. Подключаются необходимые библиотеки
  2. Инициализируются две переменные: size (текущий размер массива) и space (общее количество доступного места). Обе переменные инициализируются нулями.
  3. Выделяется память под массив. Для этого используется функция malloc, которой передается размер в байтах (так как scanf записывает в массив указателей, а не в массив int). Размер в байтах равен произведению size на sizeof(int).
  4. В цикле while считывается ввод пользователя. Если считанный символ не является числом (проверка isdigit), то цикл продолжает считывать следующий символ. Если считанное число, то оно считывается в переменную ch, а затем возвращается в поток ввода с помощью функции ungetc. Это нужно для корректного считывания последующего ввода.
  5. Если размер массива (size) равен общему количеству доступного места (space), то размер double-удваивается, чтобы выделить больше места под массив. Затем с помощью функции realloc изменяется размер массива.
  6. Считанное число записывается в массив. Переменная size увеличивается на единицу.
  7. После окончания цикла while выводится на экран весь массив.
  8. Программа возвращает 0, что означает успешное выполнение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.5 из 5
Похожие ответы