Форум программистов, компьютерный форум CyberForum.ru

Пустой терминал (в котором можно писать, что угодно) при выполнении программы - C++

Восстановить пароль Регистрация
 
art3330
 Аватар для art3330
9 / 9 / 1
Регистрация: 16.12.2012
Сообщений: 141
25.03.2013, 14:37     Пустой терминал (в котором можно писать, что угодно) при выполнении программы #1
Доброго времени суток. Возникла такая проблема. Пробую выполнить программу в geany, на что geany выдает пустой терминал в котором я могу вводить, что угодно (он ни на что не реагирует). Программа собирается и компилируется нормально. Простой Hello World компилируется тоже нормально. В чем проблема ? Кто подскажет. Вставил в main строчу с hello, все равно ее не вывело. Вот код программы:
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
# include <iostream>
 
using namespace std;
 
struct Date{
    unsigned int day;
    unsigned int month;
    unsigned int year;
    
    Date () 
        :day(0),month(0),year(0) 
        {};
    
    Date(int d, int y, int m )
        :day(d),month(m),year(y)
        {};
};
 
struct List{
    Date date;
    List* next;
    
    List()
        :next(0)
    {};
    
    List(const Date& aDate)
        :date(aDate),next(0)
    {};
};
 
class inout{
    List* begin;
    List* current;
 
public:
    
    inout()
        : begin(0),current(0) {
        int i=1;
        while (i!=0) void add();
        out();  
    };
    
    ~inout(){
        current=begin;
        while (begin!=0){
            begin=current->next;
            delete current;
        }
    };
            
    void add(Date& date) {
        if (begin==0){
            begin = new List(date);
            current=begin;
        }
        else{
            current->next=new List(date);
            current=current->next;
        };
        cin>>current->date.day>>current->date.month>>current->date.year;
    };
    
    void out() {
        current=begin;
        while(current!=0){
        cout<<current->date.day<<"."<<current->date.month<<"."<<current->date.year;
        current=current->next;
        };
    };
};
     
int main() {
    cout<<"hello";
    inout io;
    return 0;
}
Добавлено через 2 часа 4 минуты
Предполагаю, что ошибка именно в программе, так как другие программы работают.

Добавлено через 32 минуты
В code::blocksто же самое. Это неудивительно, ведь используется один и тот же компилятор. Но теперь я точно уверен, что где-то код неккоректен
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2013, 14:37     Пустой терминал (в котором можно писать, что угодно) при выполнении программы
Посмотрите здесь:

Что будет выведено на экран при выполнении следующей программы C++
Определить, что будет выдано на терминал в результате выполнения программы C++
C++ Есть ли конструкции на подобии массивов,но размер которых можно менять сколь угодно раз во время работы программы?
C++ Что будет выведено на экран при выполнении следующего фрагмента программы
Что будет выведено на экран при выполнении следующего фрагмента программы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
25.03.2013, 14:47     Пустой терминал (в котором можно писать, что угодно) при выполнении программы #2
C++
1
while (i!=0) void add();
Чего? И что эта конструкция по вашему обозначает?
saaresto
9 / 9 / 0
Регистрация: 22.03.2013
Сообщений: 23
25.03.2013, 14:47     Пустой терминал (в котором можно писать, что угодно) при выполнении программы #3
VS 2012, выводит "hello" и зависает так, будто там бесконечный цикл. Собственно, он там и запускается, не вижу, чтоб i меняла свое значение с 1 на 0.
art3330
 Аватар для art3330
9 / 9 / 1
Регистрация: 16.12.2012
Сообщений: 141
25.03.2013, 15:19  [ТС]     Пустой терминал (в котором можно писать, что угодно) при выполнении программы #4
Цитата Сообщение от ForEveR Посмотреть сообщение
C++
1
while (i!=0) void add();
Чего? И что эта конструкция по вашему обозначает?
я так попробовал организовать цикл, в том плане если не ноль, то эта функция включается, если ноль, то идет дальше...как я понимаю так делать нельзя?

Добавлено через 29 секунд
Цитата Сообщение от saaresto Посмотреть сообщение
VS 2012, выводит "hello" и зависает так, будто там бесконечный цикл. Собственно, он там и запускается, не вижу, чтоб i меняла свое значение с 1 на 0.
Сейчас гляну.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
25.03.2013, 15:23     Пустой терминал (в котором можно писать, что угодно) при выполнении программы #5
art3330, Верно. Тут и есть бесконечный цикл. На самом деле это просто декларация локальной функции - то есть ваш цикл сводится к while (i != 0) ;
Где i всегда равно 1.
art3330
 Аватар для art3330
9 / 9 / 1
Регистрация: 16.12.2012
Сообщений: 141
25.03.2013, 15:27  [ТС]     Пустой терминал (в котором можно писать, что угодно) при выполнении программы #6
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
# include <iostream>
 
using namespace std;
 
struct Date{
    unsigned int day;
    unsigned int month;
    unsigned int year;
    
    Date () 
        :day(0),month(0),year(0) 
        {};
    
    Date(int d, int y, int m )
        :day(d),month(m),year(y)
        {};
};
 
struct List{
    Date date;
    List* next;
    
    List()
        :next(0)
    {};
    
    List(const Date& aDate)
        :date(aDate),next(0)
    {};
};
 
class inout{
    List* begin;
    List* current;
 
public:
    
    inout() :begin(0),current(0) {};
    
    ~inout(){
        current=begin;
        while (begin!=0){
            begin=current->next;
            delete current;
        }
    };
            
    void add(Date& date) {
        int k;
        while (k!=0)
            if (begin==0){ begin = new List(date); current=begin;}
            else{current->next=new List(date); current=current->next;
            };
            cin>>current->date.day>>current->date.month>>current->date.year;
            cout<<"Press 0 to exit";
            cin>>k;
    };
    
    void out() {
        current=begin;
        while(current!=0){
        cout<<current->date.day<<"."<<current->date.month<<"."<<current->date.year;
        current=current->next;
        };
    };
};
     
int main() {
    inout io;
    io.add(date);
    io.out();
    return 0;
}
Попробовал переделать так, ругается что нету декларации data, в main, при вызове io.add(date);.
Что-то я запутался. Будьте добры, разъясните.

Добавлено через 1 минуту
Цитата Сообщение от ForEveR Посмотреть сообщение
art3330, Верно. Тут и есть бесконечный цикл. На самом деле это просто декларация локальной функции - то есть ваш цикл сводится к while (i != 0) ;
Где i всегда равно 1.
Действительно. Я совсем забыл про i. А можете помочь мне изменить код, так чтобы конструктор отвечал только за инициализацию?
Я попробовал, да что-то не получается.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
25.03.2013, 15:41     Пустой терминал (в котором можно писать, что угодно) при выполнении программы #7
art3330, date это переменная типа Date - формальный параметр функции add. Вы должны передать туда уже созданный объект. Что-то вроде

C++
1
2
Date d(1, 1, 1970);
io.add(d);
Но у вас какая-то странная логика. Зачем вообще передается date в функцию add, если она потом вводится? Ну или используйте тогда
C++
1
2
Date d;
io.add(d);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2013, 01:34     Пустой терминал (в котором можно писать, что угодно) при выполнении программы
Еще ссылки по теме:

Что будет выведено на экран при выполнении следующей программы при n = 5 ? C++
C++ Подскажите 2д движок в котором на с++ писать можно

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

Или воспользуйтесь поиском по форуму:
art3330
 Аватар для art3330
9 / 9 / 1
Регистрация: 16.12.2012
Сообщений: 141
26.03.2013, 01:34  [ТС]     Пустой терминал (в котором можно писать, что угодно) при выполнении программы #8
Цитата Сообщение от ForEveR Посмотреть сообщение
art3330, date это переменная типа Date - формальный параметр функции add. Вы должны передать туда уже созданный объект. Что-то вроде

C++
1
2
Date d(1, 1, 1970);
io.add(d);
Но у вас какая-то странная логика. Зачем вообще передается date в функцию add, если она потом вводится? Ну или используйте тогда
C++
1
2
Date d;
io.add(d);
Сделал как Вы написали, так у меня xubuntu завис О_О

Мне по задаче надо сделать так, чтобы я сам мог вводить данные. Если явно передавать, то все работает хорошо. А вот как сделать, чтобы передавалось то, что ввожу я, я не знаю. Не понимаю.

Добавлено через 5 минут
Вот сейчас не работает, даже при явной передаче.

Добавлено через 22 минуты
Переделал то, что было раньше. Так он теперь просто крутит цикл. И все время просит вводить ноль если выход. То есть получается так:
Press 0 to exit1
Press 0 to exit1
Press 0 to exit1
Press 0 to exit1
Press 0 to exit1


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
# include <iostream>
 
using namespace std;
 
struct Date{
    unsigned int day;
    unsigned int month;
    unsigned int year;
    
/*  Date () 
        :day(0),month(0),year(0) 
        {};
    
    Date(int d, int y, int m )
        :day(d),month(m),year(y)
        {};
*/};
 
struct List{
    Date date;
    List* next;
    
    List()
        :next(0)
    {};
    
    List(const Date& aDate)
        :date(aDate),next(0)
    {};
};
 
class inout{
    List* begin;
    List* current;
 
public:
    
    inout()
        : begin(0),current(0) {
        int i=1;
        while (i!=0) {void add();cout<<"Press 0 to exit"; cin>>i;}
        out();  
    };
    
    ~inout(){
        current=begin;
        while (begin!=0){
            begin=current->next;
            delete current;
        }
    };
            
    void add(Date& date) {
        if (begin==0){
            begin = new List(date);
            current=begin;
        }
        else{
            current->next=new List(date);
            current=current->next;
        };
        cin>>current->date.day>>current->date.month>>current->date.year;
        
    };
    
    void out() {
        current=begin;
        while(current!=0){
        cout<<current->date.day<<"."<<current->date.month<<"."<<current->date.year;
        current=current->next;
        };
    };
};
     
int main() {
    inout io;
    return 0;
}
Добавлено через 5 минут
Комментарии надо убрать.

Добавлено через 4 часа 16 минут
Так все-таки. Как здесь лучше быть? За меня редактировать код не стоит, мне достаточно будет совета, как здесь лучше сделать.

Добавлено через 4 часа 51 минуту
Все. Придумал и реализовал =)
Yandex
Объявления
26.03.2013, 01:34     Пустой терминал (в котором можно писать, что угодно) при выполнении программы
Ответ Создать тему
Опции темы

Текущее время: 16:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru