Функция копирования в символьный массив - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Программа работает не корректно. После первого запуска всегда пропускается ввод второй строки. Подозреваю, что это связано с символом конца строки после ввода количества символов в строке.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LIM 1000
 
void strng_cpy (char *a, char *b, int count);
 
int main(void)
{
    int max;
    int count;
    char c;
    printf("Введите максимальное количество элементов в строке\n");
    scanf("%d", &max);
    char *string1 = (char *)malloc(max * sizeof(char));
    char *string2 = (char *)malloc(max * sizeof(char));
    do
    {   
        printf("Введите вторую  строку\n");
        
        fgets(string2, max, stdin);
        printf("вы ввели:\n%s\n%s\n", string1, string2);
        printf("Выберите количество символов, которое необходимо скопировать из второй строки\n");
        scanf("%d", &count);
        strng_cpy(string1, string2, count);
        printf("%s\n%s\n", string1, string2);
        printf("Нажмите любую кнопку для продолжения или q для выхода\n");
    }
    while((c = getchar()) != 'q');
    printf("Всего хорошего\n");
}
 
void strng_cpy (char *a, char *b, int count)
{   
    int i = 0;
    while(i++ < count)
    {
        *a++ = *b++;
    }
}

Решение задачи: «Функция копирования в символьный массив»

textual
Листинг программы
do
    {   
        printf("Введите вторую  строку\n");
        
        fgets(string2, max, stdin);
        printf("вы ввели:\n%s\n%s\n", string1, string2);
        printf("Выберите количество символов, которое необходимо скопировать из второй строки\n");
        scanf("%d", &count);
        
        printf("%s\n%s\n", strng_cpy(string1, string2, count), string2);
        printf("Нажмите любую кнопку для продолжения или q для выхода\n");
        while(getchar()!='\n')
        {
            continue;
        }
    }
    while(getchar() != 'q');
    printf("Всего хорошего\n");
}
 
char * strng_cpy (char *a, char *b, int count)
{   
    int i = 0;
    char *pt;
    while(i++ < count)
    {
        *a++ = *b++;
    }
    *a = 0;
return a;
}

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

  1. Программа запрашивает у пользователя ввод двух строк.
  2. Функция fgets() используется для считывания строки со стандартного ввода и сохраняет её в переменной string2.
  3. Введенные строки выводятся на экран.
  4. Пользователю предлагается выбрать количество символов для копирования из второй строки.
  5. Введенное значение сохраняется в переменной count.
  6. Вызывается функция strng_cpy(), которая принимает три аргумента: исходную строку, строку для копирования и количество символов для копирования.
  7. Результат работы функции strng_cpy() выводится на экран.
  8. В цикле, пока пользователь не нажмет любую кнопку, программа продолжает работу.
  9. Если пользователь вводит 'q', программа завершается.
  10. После завершения программы выводится сообщение Всего хорошего.
  11. В функции strng_cpy() объявлены три переменные: i (счетчик), pt (указатель на текущий символ).
  12. В цикле while происходит копирование символов из строки b в строку a.
  13. Каждый символ копируется путем присвоения указателю a значения указателя b.
  14. Переменная i увеличивается на 1 после каждого присвоения.
  15. После завершения цикла, в конце строки a устанавливается нулевой символ.
  16. Функция возвращает указатель a.
  17. Ввод и вывод в функции strng_cpy() не используются.
  18. В функции strng_cpy() не используются стандартные библиотеки.
  19. Функция strng_cpy() не обрабатывает ошибки.
  20. Код не содержит комментариев.

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


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

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

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