Функция копирования в символьный массив - 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;
}
Объяснение кода листинга программы
- Программа запрашивает у пользователя ввод двух строк.
- Функция
fgets()используется для считывания строки со стандартного ввода и сохраняет её в переменнойstring2. - Введенные строки выводятся на экран.
- Пользователю предлагается выбрать количество символов для копирования из второй строки.
- Введенное значение сохраняется в переменной
count. - Вызывается функция
strng_cpy(), которая принимает три аргумента: исходную строку, строку для копирования и количество символов для копирования. - Результат работы функции
strng_cpy()выводится на экран. - В цикле, пока пользователь не нажмет любую кнопку, программа продолжает работу.
- Если пользователь вводит 'q', программа завершается.
- После завершения программы выводится сообщение
Всего хорошего. - В функции
strng_cpy()объявлены три переменные:i(счетчик),pt(указатель на текущий символ). - В цикле
whileпроисходит копирование символов из строкиbв строкуa. - Каждый символ копируется путем присвоения указателю
aзначения указателяb. - Переменная
iувеличивается на 1 после каждого присвоения. - После завершения цикла, в конце строки
aустанавливается нулевой символ. - Функция возвращает указатель
a. - Ввод и вывод в функции
strng_cpy()не используются. - В функции
strng_cpy()не используются стандартные библиотеки. - Функция
strng_cpy()не обрабатывает ошибки. - Код не содержит комментариев.