#c #arrays #input #for-loop #char
#c #массивы #ввод #for-цикл #символ
Вопрос:
Я новичок в C. Мне нужно знать, как запрашивать пользовательский ввод, который может представлять собой произвольное количество слов, а затем помещать символы в массив.
Я знаю, что на это не должно быть слишком сложно ответить, но Google просто сбивает меня с толку.
Заранее спасибо
Ответ №1:
Если я правильно понимаю вашу проблему, вам нужно прочитать пользовательский ввод некоторого неизвестного размера, таким образом, сохранить эту информацию в массив символов, верно? Если это так, одним из возможных решений было бы иметь массив символов, которому должен быть присвоен фиксированный размер по умолчанию, это динамически перераспределяет его размер на лету.
После перебора символов ввода, одновременно проверяя, что вы не попали в EOF, вы должны добавить символ в массив. Затем хитрость заключается в том, чтобы проверить, достаточно ли велик массив для хранения символов из пользовательского ввода. Если нет, вам нужно перераспределить размер массива.
Примерная реализация решения может выглядеть примерно так:
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned int len_max = 128;
unsigned int current_size = 0;
char *input = malloc(len_max);
current_size = len_max;
printf("nEnter input:");
if(input != NULL) {
int c = EOF;
unsigned int i = 0;
// Accept user input until hit EOF.
while (( c = getchar() ) != EOF) {
input[i ] = (char)c;
// If reached maximize size, realloc size.
if (i == current_size) {
current_size = i len_max;
input = realloc(input, current_size);
}
}
// Terminate the char array.
input[i] = '';
printf("nLong String value:%s nn",input);
// Free the char array pointer.
free(input);
}
return 0;
}
С точки зрения производительности я не уверен, что это может быть лучшим решением, но я надеюсь, что это поможет вам решить вашу проблему.
С уважением ~ E.
Ответ №2:
Начните усерднее учиться… Небольшая помощь:
- Для печати используйте
printf()
- Для пользовательского ввода используйте
scanf()
orfgets()
(второй лучше, но немного сложнее …)