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

Глюк или ? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
sade_
1 / 1 / 0
Регистрация: 02.04.2010
Сообщений: 28
01.06.2010, 02:21     Глюк или ? #1
я так понимаю, можно "остановить " консоль(не дать закрыться) разными способами
кто как делает
пишу я себе программу, ставлю как всегда что типа getch()
не ловит!
не останавливается, не ждет моего ввода
ладно!
давай еще!
в итоге тяжелая артиллерия в виде
C++
1
2
3
4
scanf("%d",&k);
getch();
getchar();
system("pause");
и она все равно закрывается!
я уже и заново, в другой файл кинула.там первый раз не закрылась. теперь опять закрывается
то ли у меня крыша поехала, то ли у них?
кто что посоветует?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2010, 02:21     Глюк или ?
Посмотрите здесь:

глюк в программе C++
C++ Глюк GetWindowModuleFileName
Глюк системы или кривой код? C++
Странный глюк с вектором C++
глюк с определениями C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
01.06.2010, 02:27     Глюк или ? #2
Цитата Сообщение от sade_ Посмотреть сообщение
кто что посоветует?
Для начала весь код покажите. Может он до Вашей артиллерии и не доходит...
Digan
0 / 0 / 0
Регистрация: 17.05.2010
Сообщений: 12
01.06.2010, 03:26     Глюк или ? #3
Всегда останавливал консоль так:
C++
1
scanf("%d");
Всегда работало.
sade_
1 / 1 / 0
Регистрация: 02.04.2010
Сообщений: 28
01.06.2010, 03:42  [ТС]     Глюк или ? #4
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
int _tmain(int argc, _TCHAR* argv[])
{
    int k;
    bool answer=true;
    setlocale(LC_ALL,"Russian");
    
 
while (answer)
{  
        scanf("%d",&k); 
    
    switch(k)
    {
    case 1:
        {
            puts("Создание базы данных");
            if (CreateDB())
                puts("База данных создана");
            else puts("Файл не создан");
            puts("Нажмите Enter");
            getch();
            
            
            
            break;
            
        }
    }
    
        
    
    
 
 
   
}
 
    return 0;
}
Digan,не работает
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
01.06.2010, 03:52     Глюк или ? #5
sade_, во-первых после case 1: фигурные скобки не нужны - оно и так выполняется до оператора break; а во-вторых
Цитата Сообщение от sade_ Посмотреть сообщение
CreateDB()
а оно где?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
01.06.2010, 03:54     Глюк или ? #6
C
1
2
3
4
scanf("%d",&k);
getch();
getchar();
system("pause");
scanf("%d",&k); - нужно делать k, а зачем
getch(); - есть не во всех компиляторах, так как не стандарт
getchar(); - есть везде, может ожидать Enter в отличие от getch()
system("pause"); - непереносима между системами, так как требует программу pause
Digan
0 / 0 / 0
Регистрация: 17.05.2010
Сообщений: 12
01.06.2010, 11:03     Глюк или ? #7
Консоль закрывается потому-что функция main возвращает ноль.
Я лично если не нужно, чтобы она что то возвращала делаю возвращаемый тип void.
C++
1
2
3
4
5
6
void main()
{
   //тут какой-то код
   
   scanf("%d");
}
time2die
51 / 51 / 3
Регистрация: 25.05.2010
Сообщений: 182
01.06.2010, 12:32     Глюк или ? #8
/me запускал программу в консоли руками и необходимости пользоваться такими извращениями не было
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
01.06.2010, 12:43     Глюк или ? #9
Цитата Сообщение от Digan Посмотреть сообщение
Консоль закрывается потому-что функция main возвращает ноль.
А если функция main() не дошла до return 0, а аварийно завершилась где-то по середине - консоль в фиолетовый цвет окрашивается?

sade_, для отладки именно этого места временно уберите настоящую функцию CreateDB(), если она всё-таки есть (например не включайте заголовочный файл, в котором она объявлена, или просто закомментируйте её) и сделайте вместо неё заглушку
C++
1
bool CreateDB(){ return true; }
Ещё настоятельно рекомендую перечитать в учебнике раздел про оператор switch
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
01.06.2010, 13:43     Глюк или ? #10
Цитата Сообщение от Digan Посмотреть сообщение
Консоль закрывается потому-что функция main возвращает ноль.
Я лично если не нужно, чтобы она что то возвращала делаю возвращаемый тип void.
Это где ж вы такое вычитали интересно??? ))) Не говоря уже о том, что использование void в качестве возвращаемого значения функции main не соответствует стандарту.
Цитата Сообщение от sade_ Посмотреть сообщение
пишу я себе программу, ставлю как всегда что типа getch()
не ловит!
не останавливается, не ждет моего ввода
Возможно всё дело в scanf. Попробуйте делать так scanf("%d%*c", &k); Если не поможет, то используйте fgets+atoi ))
Цитата Сообщение от sade_ Посмотреть сообщение
в итоге тяжелая артиллерия...
...и она все равно закрывается!
если уж несколько в подряд идущих функций getchar не срабатывают, то скорее всего программа падает, ещё до того как до них доходит.
Цитата Сообщение от easybudda Посмотреть сообщение
Ещё настоятельно рекомендую перечитать в учебнике раздел про оператор switch
А что не так с оператором switch?
sade_
1 / 1 / 0
Регистрация: 02.04.2010
Сообщений: 28
01.06.2010, 14:12  [ТС]     Глюк или ? #11
Цитата Сообщение от easybudda Посмотреть сообщение
А если функция main() не дошла до return 0, а аварийно завершилась где-то по середине - консоль в фиолетовый цвет окрашивается?

sade_, для отладки именно этого места временно уберите настоящую функцию CreateDB(), если она всё-таки есть (например не включайте заголовочный файл, в котором она объявлена, или просто закомментируйте её) и сделайте вместо неё заглушку
C++
1
bool CreateDB(){ return true; }
Ещё настоятельно рекомендую перечитать в учебнике раздел про оператор switch
вся проблема была в CreateDB(закомментили и посмотрели, работает без нее--значит ошибка в ней)
что за фишка, не понятно, хотя там все цивильно
я просто переписала ее и всё норм
насчет switch и скобок
скобки не играют никакой роли, это просто begin/end,в них нет никаких проблем))может они там и не обязательны, просто привычка с C# осталась)
всем спасибо!теперь я даже больше способов остановки знаю)
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
01.06.2010, 14:37     Глюк или ? #12
Цитата Сообщение от sade_ Посмотреть сообщение
скобки не играют никакой роли
Да скобки - это ладно. Просто читается чуть хуже. А вот отсутствие ветви default хоть формально и допускается, но крайне не рекомендуется - может приводить к сложно уловимым ошибкам, когда выполнение программы "проваливается" сквозь оператор switch потому, что не нашлось соответствующего case, а по логике не должно бы. Считается неплохой привычкой хотябы default: break; оставлять...

Добавлено через 3 минуты
Цитата Сообщение от sade_ Посмотреть сообщение
теперь я даже больше способов остановки знаю)
Вы бы лучше на этот пост
Цитата Сообщение от time2die Посмотреть сообщение
запускал программу в консоли руками и необходимости пользоваться такими извращениями не было
внимание обратили...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2010, 16:49     Глюк или ?
Еще ссылки по теме:

C++ глюк с teelg
C++ Глюк gcc?
C++ Глюк печатания и глюк порчи константы

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

Или воспользуйтесь поиском по форуму:
sade_
1 / 1 / 0
Регистрация: 02.04.2010
Сообщений: 28
01.06.2010, 16:49  [ТС]     Глюк или ? #13
честно говоря,про что он говорит, я не поняла))
объясни)
Yandex
Объявления
01.06.2010, 16:49     Глюк или ?
Ответ Создать тему
Опции темы

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