Как я могу прочитать с клавиатуры строку только из 4 буквенно-цифровых символов, ни один меньше, ни один еще - PullRequest
0 голосов
/ 28 мая 2018

Мне нужно понять, как читать с клавиатуры строку с точным количеством символов.

Эта функция вызывается из строки main.

void get_string(char *prompt,
            char *input,
            int length)
{
    printf("%s", prompt);

    if (!fgets(input, length, stdin))
    {
        printf("\nErrore: Inserisci correttamente la stringa.\n");
        get_string(prompt, input, length);
    }
    return;
}

, послебудет скопирован в input [length].

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Как я прочитал из другого ответа, вы можете выполнить это с помощью функции scanf, например:

scanf("%3s", string);

Где 3 - максимальное количество символов, которое можно прочитать.Помните, что если вы хотите прочитать n символов, ваш массив должен иметь длину n + 1 из-за нулевого терминатора '\ 0'

Надеюсь, это поможет,

0 голосов
/ 28 мая 2018

использовать scanf("%4s").4 перед s прекращает сохранение ввода после 4-го символа.

char buf[4];
scanf("%4s", buf);
printf("%s\n", buf);

input:  123abc
output: 123a

Это неправильное решение,так как он будет читать не только буквенно-цифровые символы.

Моя вторая попытка состояла в том, чтобы заменить scanf на scanf("%4[a-zA-Z0-9]s", buf);, но это остановилось бы на не алфавитно-цифровых символах, так что все равно ничего хорошего.

Aправильный путь будет следующим (цикл, сканирование 1 символа, проверка буквенно-цифровых символов):

char buf[32] = "";
for(unsigned idx = 0; idx < 4; )
{
    int c = getchar();
    if(isalnum(c))
    {
        buf[idx] = c;
        idx++;
    }

}
printf("%s\n", buf);
...