Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
IramKenZo
1 / 1 / 2
Регистрация: 02.11.2014
Сообщений: 57
#1

Нужны некоторые пояснения - C++

09.11.2014, 13:42. Просмотров 219. Ответов 4
Метки нет (Все метки)

При выполнении программы есть область 20 на 20.
1) Почему при движении вправо или влево, после того, как заканчивается строчка, курсор переходит на новую строку (когда, по-моему, такого не должно быть), а при движении вверх или вниз курсор уходит за пределы и его не видно.
2)если курсор вышел из области(то есть движение вниз было >20 раз), где он?(я правильно понял, что я вышел за границы массива, но тогда почему программа не завершается с ошибкой?)


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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{
    char prostr[20][20];
    char c = '|';
    char c1;
    int n=0; //столбец
    int m=0; //строка
 
    for(int i=0; i<20; i++)   //заполняем массив
    {
        for(int j=0; j<20; j++)
        {
            prostr[i][j]='*';
        }
    }
 
 
    do
    {
        c1=_getch();
        system("cls");
 
        if(c1 == 'D' || c1 == 'd') // движение вправо
        {
            prostr[m][n]=' ';
            prostr[m][n+1]=c;
            n++;
        }
 
        if(c1 == 'A' || c1 == 'a') //движение влево
        {
            prostr[m][n]=' ';
            prostr[m][n-1]=c;
            n--;
        }
 
        if(c1 == 'S' || c1 == 's') //движение вниз
        {
            prostr[m][n]=' ';
            prostr[m+1][n]=c;
            m++;
        }
 
        if(c1 == 'W' || c1 == 'w') // движение вверх
        {
            prostr[m][n]=' ';
            prostr[m-1][n]=c;
            m--;
        }
 
        for(int i=0; i<20; i++)   //выводим массивна экран
        {
            for(int j=0; j<20; j++)
            {
                cout << prostr[i][j];
            }
            cout << endl;
        }
 
    }while (c1 != 'q');
 
 
    return 0;
}

http://www.cyberforum.ru/cpp-beginners/thread1893444.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.11.2014, 13:42
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Нужны некоторые пояснения (C++):

Нужны пояснения
Читаю &quot;С++ руководство для начинающих&quot; Герберта Шилдта. Дочитал до &quot;передача...

Нужны пояснения по вложенным классам
задался вот таким вопросом, почему не получается объявить вложенный класс...

Conversion by constructor , нужны пояснения
Здравствуйте. Смотрю я, что пишут об этом Conversion by constructor, вижу...

Реализация связанного списка - нужны пояснения
#include &lt;iostream&gt; using namespace std; class cool { public: ...

Нужны пояснения насчет компиляторов для разных ОС
Всем привет ребят! Есть несколько вопросов: 1) Существуют различные...

4
Байт
Эксперт C
17764 / 11789 / 2449
Регистрация: 24.12.2010
Сообщений: 23,710
09.11.2014, 14:03 #2
Цитата Сообщение от IramKenZo Посмотреть сообщение
после того, как заканчивается строчка, курсор переходит на новую строку
prostr[0][20] = prostr[1][0] Так транслятор располагает
Цитата Сообщение от IramKenZo Посмотреть сообщение
но тогда почему программа не завершается с ошибкой?
Чисто случайно. Затираешь какие-то места, которые никому не принадлежат. Подвигайся еще, навярняка ошибочка выскочит
0
IramKenZo
1 / 1 / 2
Регистрация: 02.11.2014
Сообщений: 57
09.11.2014, 15:06  [ТС] #3
Цитата Сообщение от Байт Посмотреть сообщение
Чисто случайно. Затираешь какие-то места, которые никому не принадлежат. Подвигайся еще, навярняка ошибочка выскочит
а можно этого как-то избежать?
0
Байт
Эксперт C
17764 / 11789 / 2449
Регистрация: 24.12.2010
Сообщений: 23,710
09.11.2014, 15:09 #4
Цитата Сообщение от IramKenZo Посмотреть сообщение
а можно этого как-то избежать?
Конечно! Просто грамотно писать программу. Проверять выход индексов за пределы диапазона.
C++
1
if (n>0) n--;
0
IramKenZo
1 / 1 / 2
Регистрация: 02.11.2014
Сообщений: 57
09.11.2014, 15:46  [ТС] #5
Цитата Сообщение от Байт Посмотреть сообщение
Конечно! Просто грамотно писать программу. Проверять выход индексов за пределы диапазона.
C++
1
2
3
4
5
6
7
8
9
10
11
        if(c1 == 'D' || c1 == 'd') // движение вправо
        {
            if(n >= 19)
                n--;
            else
            {
                prostr[m][n]=' ';
                prostr[m][n+1]=c;
            }
            n++;
        }
так будет лучше?
0
09.11.2014, 15:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2014, 15:46
Привет! Вот еще темы с решениями:

Нужны небольшие пояснения по маленькому фрагменту кода, реализующего рекурсивный поиск в глубину по графу
Здравствуйте, не могу разобраться в этой функции. Ниже есть ссылка на сам...

Структура "Student", нужны пояснения
Доброе время суток форум. Нужна помощь в объяснении программы. Хочу в ней...

Объясните, для чего нужны некоторые строчки в коде(using namespace, new, int main)
#include &lt;iostream&gt; using namespace std; //для чего эта строчка int...

Главная функция (вводит некоторые значения и передает их и ссылки на некоторые переменные в функцию)
Написать главную функцию, которая вводит некоторые значения и передает их и...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru