Считывание массива строк с клавиатуры - C (СИ)

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

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

Требуется считать массив строк Если пытаться присваивать элементу двумерного массива считавшийся символ, то считывание прекращается по нажатию энтера, а не по EOF, в чем может быть дело?
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    char **strings = (char**)malloc(10*sizeof(char*));
    char c = NULL;
    int N = 0;
    int j = 0;
 
    while ((c = getchar()) != EOF)
    {   
        int k = 0;
        while (c != '\n')
        strings[j][k++] = c;
        j++;
    }
 
    return 0;
}

Решение задачи: «Считывание массива строк с клавиатуры»

textual
Листинг программы
#include <glib.h>
#include <stdio.h>
#include <string.h>
 
#define STD_STR_LEN (512)
 
typedef struct _StringList {
    GSList * pointers;
    GStringChunk * data;
} StringList;
 
StringList * sl_new(void) {
    StringList * sl = g_new(StringList, 1);
    sl->pointers = NULL;
    sl->data = g_string_chunk_new(STD_STR_LEN);
    
    return sl;
}
 
void sl_add(StringList * list, const gchar * str) {
    list->pointers = g_slist_append(list->pointers, g_string_chunk_insert(list->data, str));
}
 
void sl_dump(StringList * list) {
    void dump(gpointer str, gpointer dummy) {
        printf("%s\n", (char*)str);
    }
    g_slist_foreach(list->pointers, dump, NULL);
}
 
void sl_free(StringList * list) {
    g_string_chunk_free(list->data);
    g_slist_free(list->pointers);
    g_free(list);
}
 
char * str_chomp(char * str) {
    char * nl = strrchr(str, '\n');
    if ( nl )
        *nl = '\0';
        
    return str;
}
 
int main(void) {
    char str[STD_STR_LEN];
    StringList * list = sl_new();
    
    while ( printf("> ") && fgets(str, STD_STR_LEN, stdin) && *str != '\n' )
        sl_add(list, str_chomp(str));
    
    printf("\nYou has entered:\n");
    sl_dump(list);
    
    sl_free(list);
    return 0;
}

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

В этом коде представлена простая программа на языке C, которая позволяет пользователю вводить строки с клавиатуры и выводит их на экран. Список переменных и их значения:

  1. list - указатель на структуру StringList, которая содержит указатель на список строк (pointers) и массив строк (data).
  2. str - строка, в которую считывается ввод пользователя.
  3. STD_STR_LEN - константа, определяющая максимальную длину строки.
  4. nl - указатель на символ новой строки (\n) в строке str. Программа работает в цикле, пока пользователь вводит строки и нажимает Enter. Введенные строки добавляются в список list с помощью функции sl_add. Когда ввод завершается, программа выводит все строки из списка на экран с помощью функции sl_dump. Затем список освобождается с помощью функции sl_free, и программа завершается. Строки, вводимые пользователем, удаляются с помощью функции str_chomp от символа новой строки в конце, чтобы они не появлялись в списке. Функции sl_new, sl_add, sl_dump, sl_free и str_chomp определены в теле программы и необходимы для работы списков строк.

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


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

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

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