scanf
- это не тот путь, особенно если ваш ввод может содержать пробелы, на которых scanf
прекратит читать больше входных данных и не сохранит, например, пробелы.
Вы должны использовать fgets
, который позволяет ограничивать входные данные в соответствии с буфером, в котором эти данные хранятся. Так что-то вроде:
fgets(string, STR_SIZE, stdin)
должно работать.
О размере - у вас должно быть некоторое ограничение на максимальный размер строки, и тогда STR_SIZE должен быть установлен на это число. Это должно быть частью требований вашей программы или просто размера, который имеет смысл, если вы предъявляете требования. Он должен быть определен до того, как вы прочитаете ввод от пользователя, потому что буферная память выделяется до чтения.
Комментарий о стиле, не связанный с вашим вопросом - всегда старайтесь уменьшить дублирование кода до 0. Строка alfanumerico[count2] = string[count]; count2++;
появляется в вашем коде 4 раза. Более элегантный минимальный оператор if
с точно такой же функциональностью будет выглядеть так:
if ((string[count] >= '0' && string[count] <= '9') ||
(string[count] >= 'a' && string[count] <= 'z') ||
(string[count] >= 'A' && string[count] <= 'Z') ||
(string[count] == ' '))
{
alfanumerico[count2] = string[count];
count2++;
}
и быть еще более минимальным:
char c = string[count];
if ((c >= '0' && c <= '9') ||
(c >= 'a' && c <= 'z') ||
(c >= 'A' && c <= 'Z') ||
(c == ' '))
{
alfanumerico[count2] = c;
count2++;
}
Он также более читабелен и более удобен в обслуживании - если вы хотите изменить переменную count
на i
, вы делаете это в одном месте вместо 8.
Кроме того, всегда закрывайте область видимости в новой строке.