Можно ли ограничить ввод в буфер, к примеру, 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;
}

Объяснение кода листинга программы

  1. Количество символов для чтения - двузначное число.
  2. Используется функция very_smart_function для чтения строки из стандартного ввода (stdin).
  3. В этой функции происходит проверка на размер буфера (BUF_SIZE). Если введенная строка превышает размер буфера, то происходит завершение программы.
  4. В функции main в цикле while происходит запрос на ввод количества символов для чтения.
  5. После ввода строки вызывается функция very_smart_function с аргументом n (количество символов для чтения).
  6. Функция very_smart_function считывает строку из стандартного ввода и сохраняет ее в массиве array.
  7. После этого выводится сообщение с введенными символами.
  8. Если количество символов для чтения меньше или равно нулю, то цикл while завершается.
  9. Ввод и вывод управляется функцией fgets.
  10. Функция atoi используется для преобразования символов в целое число.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.625 из 5
Похожие ответы