Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
7 / 4 / 4
Регистрация: 27.03.2017
Сообщений: 131

Функция копирования в символьный массив

03.06.2017, 14:11. Показов 1830. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Программа работает не корректно. После первого запуска всегда пропускается ввод второй строки. Подозреваю, что это связано с символом конца строки после ввода количества символов в строке.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#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++;
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.06.2017, 14:11
Ответы с готовыми решениями:

Скопировать одномерный символьный массив в двумерный символьный массив
Здравствуйте, учусь программировать на Си. Столкнулся с проблемой: не могу скопировать одномерный символьный массив в двумерный символьный...

Функция atoi и символьный массив
Есть символьный массив и массив целых чисел. Необходимо преобразовать символьный в целый тип. #include &lt;stdio.h&gt; #include...

Функция, которая переписывает одномерный символьный массив в обратном порядке
Дана символьная матрица размера n*m. Преобразовать ее таким образом, чтобы элементы каждой нечетной строки расположились в обратном...

11
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
03.06.2017, 14:18
Лучший ответ Сообщение было отмечено CarbonBased как решение

Решение

Цитата Сообщение от CarbonBased Посмотреть сообщение
Подозреваю, что это связано с символом конца строки после ввода количества символов в строке.
Так вычитайте его из буфера while (getchar()!='\n'); или scanf("%*[^\n]%*c");
1
7 / 4 / 4
Регистрация: 27.03.2017
Сообщений: 131
03.06.2017, 14:40  [ТС]
А каким образом я могу возвращать строку с помощью функции?
C
1
2
3
4
5
6
7
8
9
char * strng_cpy (char *a, char *b, int count)
{   
    int i = 0;
    while(i++ < count)
    {
        *a++ = *b++;
    }
return (char *) a;
}
Этот метод не работает.

Добавлено через 2 минуты
Еще хотелось бы понять момент, касающийся приведения типов. Если я напишу
C
1
return a
то по какой причине возникает ошибка?
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
03.06.2017, 14:43
Цитата Сообщение от CarbonBased Посмотреть сообщение
А каким образом я могу возвращать строку с помощью функции?
А смысл ее возвращать она же и так изменится, ну если хочется, сделайте копию указателя на начало строки char *beg=a и возращайте beg.

Добавлено через 1 минуту
Цитата Сообщение от CarbonBased Посмотреть сообщение
Еще хотелось бы понять момент, касающийся приведения типов. Если я напишу
C
1
return a
то по какой причине возникает ошибка?
Никакой ошибки и нет.
1
7 / 4 / 4
Регистрация: 27.03.2017
Сообщений: 131
03.06.2017, 14:45  [ТС]
Цитата Сообщение от shvyrevvg Посмотреть сообщение
Никакой ошибки и нет.
На printf при таком описании функции первая строка не печатается.
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
03.06.2017, 15:04
Цитата Сообщение от CarbonBased Посмотреть сообщение
На printf при таком описании функции первая строка не печатается.
Ну это точно не связано с этим, добавьте *a=0; после цикла.
0
7 / 4 / 4
Регистрация: 27.03.2017
Сообщений: 131
03.06.2017, 18:25  [ТС]
Цитата Сообщение от shvyrevvg Посмотреть сообщение
Ну это точно не связано с этим, добавьте *a=0; после цикла.
работает только начиная со второго прохода с цикла, выдавая то, что должно быть скопировано циклом ранее.
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
03.06.2017, 18:33
CarbonBased, ничего не понял, выкладывайте код.
0
7 / 4 / 4
Регистрация: 27.03.2017
Сообщений: 131
03.06.2017, 18:44  [ТС]
Цитата Сообщение от shvyrevvg Посмотреть сообщение
ничего не понял, выкладывайте код.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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;
}
Вот что выдает программа.
Введите максимальное количество элементов в строке
100
Введите вторую строку
asdfg
вы ввели:

asdfg

Выберите количество символов, которое необходимо скопировать из второй строки
3

asdfg

Нажмите любую кнопку для продолжения или q для выхода

Введите вторую строку
qwerty
вы ввели:
asd
qwerty
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
04.06.2017, 04:45
Лучший ответ Сообщение было отмечено CarbonBased как решение

Решение

CarbonBased, сначала копировать, потом выводить.
1
7 / 4 / 4
Регистрация: 27.03.2017
Сообщений: 131
04.06.2017, 15:07  [ТС]
Цитата Сообщение от shvyrevvg Посмотреть сообщение
сначала копировать, потом выводить.
Спасибо. Не могли бы объяснить, почему так?
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
04.06.2017, 15:59
Цитата Сообщение от CarbonBased Посмотреть сообщение
Спасибо. Не могли бы объяснить, почему так?
Эм... Ну, а как иначе?!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.06.2017, 15:59
Помогаю со студенческими работами здесь

Чем отличаются двумерный символьный массив и массив указателей на строки
Двумерный символьный массив и массив указателей на строки. Собственно чем они отличаются? Заранее спасибо.

Объявить массив rs из 5 строк как двумерный символьный массив
Объявить массив rs из 5 строк как двумерный символьный массив. Инициализировать rs значениями “un”, “une”, “des”, “de”. char rs =...

Дан символьный массив А. Получить целочисленный массив В, элементы которого имеют коды ASCII элементов A
через процедуры, ascii код Дан символьный массив А, состоящий из 8 элементов. Получить целочисленный массив В, элементы которого имеют...

Создать символьный массив (char-массив) из 10 элементов. Определить сколько в нѐм цифр, букв и знаков пунктуации
Создать символьный массив (char-массив) из 10 элементов. Определить сколько в нѐм цифр, букв и знаков пунктуации.

Как объявить символьный массив и числовой массив?
Как объявить символьный массив и числовой массив? И как символ записать в символьный массив и как символ записать в числовой массив?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru