Входной буфер, чтобы получить вход, C программирование - PullRequest
0 голосов
/ 18 ноября 2018

Я делаю первые шаги в программировании на Си и натолкнулся на задачу, для которой не могу найти решение.
Задача проста: взять символ у пользователя.
После этого выполучение строки от пользователя до тех пор, пока пользователь не наберет символ *.
Затем выведите количество раз, когда пользователь набрал первый символ.

Мне удалось решить проблему с помощью char [SIZE] ת, когдаЯ установил максимальный размер ввода 255 байт (#define SIZE 255).
Тем не менее, мой учитель говорит мне, что хотя решение работает хорошо, это не было целью упражнения, также я не могу предположить, что максимумразмер строки.

Он просит нас использовать входной буфер.
В упражнении не используется динамическое выделение памяти, разрешена только библиотека stdio.h.

Я прочиталмного о буфере ввода, но я все еще не нашел возможности решить упражнение - как я могу получить ценность от пользователя, не зная его размера?

Я был бы рад получитьssistance и советы о том, как правильно использовать входной буфер.
Или более подробно о том, как вводить значения (строку символов) во входной буфер, а затем переходить по каждому символу отдельно в этой строке и обрабатывать его.

Спасибо

1 Ответ

0 голосов
/ 18 ноября 2018

Нет необходимости хранить всех символов.После того, как вы прочитали персонаж, вы можете выбросить его и просто увеличить счетчик.Примерно так:

#include <stdio.h>

int main() {
    char c, first;
    int counter=0;
    printf("Enter first character: ");
    scanf("%c", &first);
    do {
        scanf("%c", &c);
        if(c == first)
            counter++;
    } while (c != '*');
    printf("You entered '%c' %d times\n", first, counter);
}

Вывод:

Enter first character: a
aaaaa*
5

или

Enter first character: a
aabbaa*
You entered 'a' 4 times

Примечание:

Как указано в комментариях,scanf не очень хороший инструмент для такого рода вещей.Я бы посоветовал не использовать его, если вы не знаете, что это правильный инструмент.Но это не относится к делу.Суть в том, чтобы показать вам, что вам не нужно хранить весь буфер ввода.Если вы хотите взглянуть на альтернативные методы ввода (как предложил Уильям Перселл в комментариях), вы можете взглянуть на fgetc, getc или getchar для чтения отдельных символов.fread также является инструментом, с которым вам следует ознакомиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...