Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 07.04.2017
Сообщений: 5
1

Динамический массив. Вывод на экран

19.04.2017, 22:33. Показов 1207. Ответов 14

Author24 — интернет-сервис помощи студентам
Ребят, проблемы с динамическим массивом. Может, кто-нибудь подскажет?
Дело вот в чём-программа, после того, как я создал проект и запустил его, корректно работает только первый раз-выводит строку, которую ввёл я. Во второй и последующие она выводит в консоль только первые четыре символа и какую-то белиберду за ними(после ввода при выходе из функции массив почему то изменяется). Код вроде написан правильно, может, в настройках Visual Studio надо что-то изменить?
Стоит версия семнадцатого года.
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 <conio.h>
#include <cstdio>
#include <windows.h>
void address(char *way)
{
    int i = 0, bin;
    while (TRUE)
    {
        way[i] = getch();
        if (way[i] == '\r')
        {
            printf("\n");
            break;
        }
        if (way[i] != '\b')
            printf("%c", way[i]);
        else
        {
            way[i] = '\0';
            i = i - 2;
            system("cls");
            bin = 0;
            while (way[bin + 1] != '\0')
            {
                printf("%c", way[bin]);
                bin++;
            }
        }
        way = (char*)realloc(way, (i + 2) * sizeof(char));
        i++;
    }
    way[i] = '\0';
}
void main()
{
    char *way = new char;
    address(way);
    puts(way);
    getchar();
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.04.2017, 22:33
Ответы с готовыми решениями:

Двумерный динамический массив (вывод на экран)
написал программу но не пойму как сделать вывод двумерного динамического массива #include...

Считывание .txt файла в динамический массив и вывод на экран
Здравствуйте! Возникла проблема с написанием кода. Программа должна считывать текст из файла и...

Как вывести на экран динамический массив?
Как вывести наэкран динамический масив подскажите плиз #include &lt;iostream&gt; #include &lt;conio.h&gt;...

Создать динамический массив и вывести его на экран
Напишите программу, в которой создается одномерный символьный динамический массив. Инициализируйте...

14
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
20.04.2017, 06:28 2
C++
1
void address(char*& way)
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
20.04.2017, 07:26 3
way - это ссылка на указатель? Если я не ошибаюсь.

Добавлено через 2 минуты
Цитата Сообщение от SuperDead_228 Посмотреть сообщение
C++
1
2
way[i] = '\0';
i = i - 2;
- может быть Вы думаете, что '\0' - это 2 символа, нет, это 1 символ, это просто 0, насколько я знаю.

Добавлено через 4 минуты
Цитата Сообщение от SuperDead_228 Посмотреть сообщение
C++
1
while(TRUE)
- true-же вроде маленькими буквами пишется, или в Visual Studio есть переназначенное true.

Добавлено через 2 минуты
Цитата Сообщение от SuperDead_228 Посмотреть сообщение
C++
1
if (way[i] == '\r')
- очень странно, что Вы первым делом сравниваете введенный символ с возвратом каретки, может быть лучше сравнивать с какой-нибудь буквой.

Добавлено через 5 минут
Цитата Сообщение от SuperDead_228 Посмотреть сообщение
C++
1
if (way[i] != '\b')
- что, разве можно принимать символ Backspace. Что Вы хотите сделать? Замените это все на буквы.
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
20.04.2017, 18:56 4
Цитата Сообщение от DemolitionMan Посмотреть сообщение
что, разве можно принимать символ Backspace
С каких пор нельзя стало? Или у него код отсутствует?

Добавлено через 54 секунды
Цитата Сообщение от DemolitionMan Посмотреть сообщение
или в Visual Studio есть переназначенное true
Есть:
C++
1
#define TRUE 1
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
20.04.2017, 19:14 5
Что, если нажать на мигающий курсор клавишу Backspace - передастся Backspace? Мне что-то все-равно кажется, что это не очень хороший стиль программирования. Лучше бы на буквы заменил он эти все '\r', да '\b', да и все.
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
20.04.2017, 19:22 6
Цитата Сообщение от DemolitionMan Посмотреть сообщение
Что, если нажать на мигающий курсор клавишу Backspace - передастся Backspace?
Запусти код и попробуй.
Цитата Сообщение от DemolitionMan Посмотреть сообщение
Мне что-то все-равно кажется, что это не очень хороший стиль программирования.
Стиль как стиль. Есть задача, она выполнена.
Цитата Сообщение от DemolitionMan Посмотреть сообщение
Лучше бы на буквы заменил он эти все '\r', да '\b', да и все.
На какие буквы можно заменить управляющие символы? Заменить - чтобы код перестал работать?
0
0 / 0 / 0
Регистрация: 07.04.2017
Сообщений: 5
20.04.2017, 23:24  [ТС] 7
Я заменил, но теперь компилятор ругается на такую запись.
Но переменная way это же у нас указатель. Мне в программе изменять сам указатель не нужно, нужно изменить только данные, которые лежат там. Тогда зачем работать с указателем на указатель?
Или я что-то не так понял?

Добавлено через 35 минут
Потестил на чужом компе--всё работает. Переустановил Visual Studio с 2013 на 2017, запустил--всё осталось так же. Кто знает, может, это с устройством связано? И стоит ли пробовать поставить другую версию?
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
20.04.2017, 23:58 8
Цитата Сообщение от SuperDead_228 Посмотреть сообщение
Я заменил, но теперь компилятор ругается на такую запись.
Какими словами?
Цитата Сообщение от SuperDead_228 Посмотреть сообщение
Мне в программе изменять сам указатель не нужно,
Память перевыделяешь?
Цитата Сообщение от SuperDead_228 Посмотреть сообщение
C++
1
way = (char*)realloc(way, (i + 2) * sizeof(char));
Уверен, что при этом адрес начала новой памяти останется тем же?
Цитата Сообщение от SuperDead_228 Посмотреть сообщение
Тогда зачем работать с указателем на указатель?
Или я что-то не так понял?
У меня там ссылка на указатель.
Цитата Сообщение от SuperDead_228 Посмотреть сообщение
Кто знает, может, это с устройством связано?
Это связано с твоим кодом. Как исправить - я показал.
0
0 / 0 / 0
Регистрация: 07.04.2017
Сообщений: 5
21.04.2017, 04:12  [ТС] 9
Ну просто строчку void address(char*& way); он выделяет как ошибку и не хочет даже запускать её.
Я тут понял, что проблема не в коде(на чужом компе прекрасно работает), проблема то ли с вижуалкой, то ли с системой--тут я не знаю даже.
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
21.04.2017, 07:45 10
Лучший ответ Сообщение было отмечено SuperDead_228 как решение

Решение

Цитата Сообщение от SuperDead_228 Посмотреть сообщение
Ну просто строчку void address(char*& way); он выделяет как ошибку и не хочет даже запускать её.
Студия? Не выдумывай. Покажи: как и где делаешь вот это:
Цитата Сообщение от SuperDead_228 Посмотреть сообщение
C++
1
void address(char*& way);
И вывод компилятора покажи. Может ты так вызов пытаешься делать?
Поступим проще:
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
41
42
43
#include <conio.h>
#include <cstdio>
#include <windows.h>
 
void address(char*& way)
{
    int i = 0, bin;
    while (TRUE)
    {
        way[i] = getch();
        if (way[i] == '\r')
        {
            printf("\n");
            break;
        }
        if (way[i] != '\b')
            printf("%c", way[i]);
        else
        {
            way[i] = '\0';
            i = i - 2;
            system("cls");
            bin = 0;
            while (way[bin + 1] != '\0')
            {
                printf("%c", way[bin]);
                bin++;
            }
        }
        way = (char*)realloc(way, (i + 2) * sizeof(char));
        i++;
    }
    way[i] = '\0';
}
 
int main()
{
    char *way = (char*)malloc(sizeof(char));
    address(way);
    puts(way);
    free(way);
    getchar();
}
И не нужно, в коде, сочетать new и realloc.
1
0 / 0 / 0
Регистрация: 07.04.2017
Сообщений: 5
21.04.2017, 17:10  [ТС] 11
Спасибо огромное! Заменил new на malloc и всё сработало! От души просто!)
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
21.04.2017, 18:55 12
Цитата Сообщение от SuperDead_228 Посмотреть сообщение
Заменил new на malloc и всё сработало!
А это сделал?
Цитата Сообщение от nd2 Посмотреть сообщение
C++
1
void address(char*& way)
0
0 / 0 / 0
Регистрация: 07.04.2017
Сообщений: 5
21.04.2017, 19:42  [ТС] 13
Да, и это тоже.)
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
21.04.2017, 19:44 14
Тогда всё в порядке.
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
21.04.2017, 19:46 15
Без этого, код из 10 поста, у меня так работает.
Миниатюры
Динамический массив. Вывод на экран  
0
21.04.2017, 19:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.04.2017, 19:46
Помогаю со студенческими работами здесь

Динамический массив строк. Ввод / вывод
Доброго времени суток!=) Помогите разобраться. Пишу функцию удаления строки из файла. организовал...

Динамический массив string и его вывод
Всем доброго времени суток! Есть цикл, в котором проверяется строка есть ли в ней символ из...

Ввод/Вывод данных в динамический массив
Помогите пожалуйста, нифига не получается Ввод/Вывод данных в динамический массив Си.

Считать из файла динамический массив, вывести его на экран
Ребят пропустил пару, а на зачете будут задания типа 1)Считать из файла динамический массив,...

Динамический массив - замена и вывод элементов массива
массив из 10 элементов заполняется данными (к примеру цифрами) выводится в Memo1 по событию...

Динамический ввод и вывод данных в двумерный массив
Не могу реализовать ввод и вывод данных двумерного массива используя указатель на указатель, в чём...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru