Считывание массива строк с клавиатуры - 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
определены в теле программы и необходимы для работы списков строк.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д