Можно ли ограничить ввод в буфер, к примеру, 10 символами? - C (СИ)
Формулировка задачи:
Всем привет! Делаю задания, оно прозвучало так: внесите изменения в функцию, чтобы она прекращала ввод после загрузки 10 символов.
Я умею делать, чтобы ввелось только 10 символов, но чтобы в входном потоке заблокировать ввод, так я ещё не научился. Подскажите как сделать, или я не правильно задание понял. Функция которую изменить нужно
спасибо
#include <stdio.h>
#include <string.h>
void func(char *ar, int n);
int main()
{
char string[40];
func(string,10);
puts(string);
}
void func(char *ar, int n)
{
int i;
for(i = 0; i < n; ++i)
*ar++ = getchar();
*ar++ = '\0';
}Решение задачи: «Можно ли ограничить ввод в буфер, к примеру, 10 символами?»
textual
Листинг программы
#include <assert.h> // assert
#include <stdio.h> // fgets, stdin
#include <stdbool.h> // true
#include <stdlib.h> // atoi
#define BUF_SIZE 40
void very_smart_function(char* const arr, int len)
{
assert(len < BUF_SIZE);
fflush(stdin);
fgets(arr, ++len, stdin);
}
int main(void)
{
char array[BUF_SIZE];
int n;
while( true ) {
puts("How many symbols to read?");
very_smart_function(array, 2); // двузначное число
n = atoi(array);
if( n <= 0 ) { break; }
puts("So, type some symbols!");
very_smart_function(array, n);
puts("Your symbols:");
puts(array);
}
return 0;
}
Объяснение кода листинга программы
- Количество символов для чтения - двузначное число.
- Используется функция very_smart_function для чтения строки из стандартного ввода (stdin).
- В этой функции происходит проверка на размер буфера (BUF_SIZE). Если введенная строка превышает размер буфера, то происходит завершение программы.
- В функции main в цикле while происходит запрос на ввод количества символов для чтения.
- После ввода строки вызывается функция very_smart_function с аргументом n (количество символов для чтения).
- Функция very_smart_function считывает строку из стандартного ввода и сохраняет ее в массиве array.
- После этого выводится сообщение с введенными символами.
- Если количество символов для чтения меньше или равно нулю, то цикл while завершается.
- Ввод и вывод управляется функцией fgets.
- Функция atoi используется для преобразования символов в целое число.