Прекратить запись в динамический массив по нажатию Enter - C (СИ)

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

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

Привет всем !!!! пытаюсь разобраться с работой с памятью, на примере создания динамического массива и вывода его на экран (пока пользователь вводит что нибудь программа считывает строку в массив ,как только пользователь ничего не вводит и жмет Enter считывание строк прекращается) вот мой код
#include <stdio.h>
#include <stdlib.h>
#define MAXLEN 20
 
int main()
{
    char **string;
    int i,j;
    char buffer[20] = {0};
    char buff[20];
    unsigned min;
    int count = 0;
    string=(char**)malloc(1*sizeof(char*));
    while (fgets(buffer, sizeof(buffer), stdin) &&
           (buffer[0] != '\n'))
    {
        string[count]=(char*)malloc(MAXLEN*sizeof(char));
        string[count] = buffer;
        printf("%s",string[count]);
        string=(char**)malloc(1*sizeof(char*));
        count++;
        
    }
     for (i = 0; i < (count - 1); ++i)
    {
         printf("%s",string[i]);
   }
    return 0;
}
Заранее всем спасибо!!!!

Решение задачи: «Прекратить запись в динамический массив по нажатию Enter»

textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
 
int main(void)
{
    char *str = (char*)malloc(sizeof(char));
    char *ptr = str;
    int chr;
 
    printf("Введите строку: ");
    chr = getchar();
    while (chr != '\n')
    {
        *ptr = (char)chr;
        str = (char*)realloc(str, ptr-str+sizeof(char)*2);
        ++ptr;
        chr = getchar();
    }
    *ptr = '\0';
    puts (str);
    free (str);
    return 0;
}

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

В этом коде:

  1. Создается динамический массив (строка) на 1 символ с помощью malloc.
  2. Вводится строка с помощью функции getchar, которая считывает ввод посимвольно.
  3. Пока вводимая строка не закончится (до нажатия Enter), выполняется следующее:
    • Каждый символ вводится в динамический массив.
    • Динамический массив увеличивается в размере с помощью realloc.
    • Указатель на следующий элемент в динамическом массиве увеличивается.
  4. После ввода строки, последний символ устанавливается в '\0' для обозначения конца строки.
  5. Введенная строка выводится с помощью функции puts.
  6. Динамический массив освобождается с помощью функции free.
  7. Программа возвращает 0, заканчивая свое выполнение.

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


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

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

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