Форум программистов, компьютерный форум, киберфорум
Наши страницы

Не могу найти ошибку в программе рисующей линию из символов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Задачи с массивами http://www.cyberforum.ru/cpp-beginners/thread648064.html
Объясните, как решить. Пример 1. void *v=static_cast<void*>(&mas)// mas - массив это имелось в виду*? не пойму, что дальше делать, вижу, что надо написать функцию, но передать void* понятно, а...
C++ Оъекты класса Как можно создать некоторое количество объектов, так чтобы их названия были наподобие car1, car2, car3... Т.е мне нужно создать кучу объектов, задавая им некоторые данные, при этом, чтобы названия... http://www.cyberforum.ru/cpp-beginners/thread648054.html
C++ Поясните детский пример
Подскажите почему не работает. #include <iostream> #include <cstdlib> using namespace std; void printBinary(const unsigned char val) { for(int i =7; i>=0; i--) if(val &(1<<i))...
C++ все тежи задачи по информатике
1)Напечатать таблицу истинности для логичес¬кой функции (А <=> В <=> С) V , где v, -,<=> - знаки логических операций ИЛИ, НЕ, Экви-валентность. 2) Элементами массива IM(N) являются числа 0 и 1....
C++ Многопоточность не пашет http://www.cyberforum.ru/cpp-beginners/thread648039.html
Изучал создание многопоточных программ, пытался создать свою: #include <windows.h> #include <process.h> #include <iostream> #include <conio.h> using namespace std; unsigned __stdcall...
C++ путь фишки фишка может двигаться по полю длины N только вперед. длина хода фишки не более К. найти число различных путей, по которым фишка может пройти от начала до конца. подробнее

Показать сообщение отдельно
qwerty87
0 / 0 / 0
Регистрация: 07.09.2012
Сообщений: 6

Не могу найти ошибку в программе рисующей линию из символов - C++

07.09.2012, 13:35. Просмотров 762. Ответов 3
Метки (Все метки)

Попытался написать консольную программу, рисующую линию из символов. Число символов вводится пользователем. Вот код программы:
Кликните здесь для просмотра всего текста

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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/**
* @brief программа, которая выводит на экран горизонтальную, вертикальную или
*        диагональную линию из символов. Число символов, их вид и 
*        тип линии - указывает пользователь. 
*/
 
#include <iostream>
#include <conio.h>
using namespace std;
 
/**
* Функция, рисующая горизонтальную линию
* @param char sign
* @return void
*/
 
void draw_hor_line(char sign)
{
    int i = 0; // итератор
    int l; // длина линии
    
    while(i <= l){
        cout << sign;
        i++;
    }
}
 
/**
* Функция, рисующая вертикальную линию
* @param char sign
* @return void
*/
 
void draw_vert_line(char sign){
    
    int i = 0; // итератор
    int l; // длина линии
 
    while(i <= l){
        cout << " " << sign << endl;
        i++;
    }
}
 
/**
* Функция, рисующая диагональную линию
* @param char sign
* @return void
*/
 
void draw_diag_line(char sign){
    
    int i = 0; // итератор
    int k = 0; // итератор вложенного цикла
    int l; // длина линии
        
    for(i = 0; i <= l; i++){ // рисуем диагональ
        for(k = 0; k <= i; k++){
           cout << " ";   
        }
        cout << sign << endl;   
    } 
}
 
int main()
{
    setlocale(0, "");
    
    int l; // длина линии
    int line; // тип линии
    char sign; // вид точек
    
    cout << "Линейные конструктор." << endl;
    
    cout << "Выберите параметры линии:" << endl;
    cout << "\tДлина:" << endl;
    cout << "\t\tЧисло от 1 до 100" << endl;
    cout << "\tВид точек:" << endl;
    cout << "\t\t1Введите любой ASCII символ, кроме "; // перевод строки
    cout << "пробела и перевода строки" << endl;
    cout << "\tТип линии:" << endl;
    cout << "\t\t1 - горизонтальная" << endl;
    cout << "\t\t2 - вертикальная" << endl;
    cout << "\t\t3 - диагональная" << endl;
    cout << "Пример: > 10 1 @" << endl;
    cout << "@@@@@@@@@@" << endl;
    cout << "> ";
    
    cin >> l >> line  >> sign;
    
    if(l < 1 || l > 100){ // допустимый диапазон для l
        cout << "Ошибка! Длина линии должна "; // перевод строки
        cout << "иметь значение от 1 до 100." << endl;
    } else {       
        switch(line){
            
            case 1:
                draw_hor_line(sign);
                break;
                
            case 2:
                draw_vert_line(sign);
                break;
                
            case 3:
                draw_diag_line(sign);
                break;
                
            default:
                cout << "Ошибка! Неверный ключ. Введите 1, 2 или 3" << endl;
                break;
        }
    }
    
    getch();
    return 0;
}


Но вместо того чтобы нарисовать линию из l символов она рисует линию из 3-х символов в случае с горизонталью и вертикалью, а диагональ вообще не может нормально нарисовать.
Пробывал сделать из каждой функции отдельную программу, программы работали как и задуманно. Вот листинги:

Для горизонтальной линии
Кликните здесь для просмотра всего текста


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
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{
    setlocale(0, "");
    
    int i = 0; // итератор
    int l; // длина линии
    char sign; // символ из которого состоят точки линии                      
    
    cout << "Рисует горизонтальную линию" << endl;
    
    cout << "Задайте длину линии и выберите символ для её отрисовки" << endl; //
    cout << "Пример: 10 *" << endl;                                           
    cin  >> l >> sign;                                                        
    
    if(l < 1 || l > 100){ // допустимый диапазон для l
        cout << "Ошибка! Длина линии должна ";
        cout << "иметь значение от 1 до 100." << endl;
    } else {
        cout << " "; // отступ от края окна
        
        while(i <= l){ // рисование линии
            cout << i;
            cout << sign;
            i++;
        }
    }
    
    getch();
    return 0;
}


Для вертикальной линии
Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{
    setlocale(0, "");
    
    int i = 0; // итератор
    int l; // длина линии
    char sign; // символ из которого состоят точки линии                      
    
    cout << "Рисует вертикальную линию" << endl;
    
    cout << "Задайте длину линии и выберите символ для её отрисовки" << endl;
    cout << "Пример: 10 *" << endl;                                           
    cin  >> l >> sign;                                                       
    cout << endl;
    
    if(l < 1 || l > 100){ // допустимый диапазон для l
        cout << "Ошибка! Длина линии должна ";
        cout << "иметь значение от 1 до 100." << endl;
    } else {
        while(i <= l){
            cout << " " << sign << endl;
            i++;
        }
    }
    
    getch();
    return 0;
}


Для диагональной линии
Кликните здесь для просмотра всего текста


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
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{
    setlocale(0, "");
    
    int i = 0; // итератор
    int k = 0;
    int l; // длина линии
    char sign; // символ из которого состоят точки линии                      
    
    cout << "Рисует диагональную линию" << endl;
    
    cout << "Задайте длину линии и выберите символ для её отрисовки" << endl; 
    cout << "Пример: 10 *" << endl;                                           
    cin  >> l >> sign;                                                      
    cout << endl;
    
    if(l < 1 || l > 100){ // допустимый диапазон для l
        cout << "Ошибка! Длина линии должна ";
        cout << "иметь значение от 1 до 100." << endl;
    } else {
    
        for(i = 0; i <= l; i++){ // рисуем диагональ
            for(k = 0; k <= i; k++){
               cout << " ";   
            }
            cout << sign << endl;   
        } 
    }
    
    getch();
    return 0;
}


Помогите найти ошибку в коде, я с программированием связался не так давно не знаю как ещё её можно найти и исправить.
При написании программы пользовался wxDev-C++, с настройками по умолчанию.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru