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