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

Выход из бесконечного цыкла - C++

Восстановить пароль Регистрация
 
EfimKR
 Аватар для EfimKR
48 / 21 / 10
Регистрация: 24.06.2014
Сообщений: 210
Записей в блоге: 1
24.06.2014, 11:43     Выход из бесконечного цыкла #1
Проблема с выходом из бесконечного цикла. Если для выхода вводить exit, программа виснет и бесконечно выводит, то, что записано в cout. Если использовать для выхода q всё работает нормально.

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
/* Разработать программу, которая выводит на экран горизонтальную линию из символов. 
Число символов, какой использовать символ, и какая будет линия - вертикальная, или горизонтальная - указывает пользователь.
Предусмотреть при вводе типа линии использование разного регистра (большие и маленькие буквы). Предусмотреть вариант 
многократной работы программы и выход из нее по желанию пользователя (чтобы во время одного запуска можно было выводить
не одну линию). */
#include<iostream>
using namespace std;
void main()
{
    setlocale(LC_CTYPE, "Russian");
    char exit;
    for (;;)        // Используем бесконечный цикл для многократной работы программы.
    {
        char symbol;
        int number, type_l;
        cout<<"Тип линии:   Вертикальная линия - 1. Горизонтальная линия - 2\n";
        cout<<"Введите через пробел тип линии, число символов, \n и символ, которым будет рисоваться линия \n";
        cin>>type_l>>number>>symbol;
        cout<<"\n";
        if (type_l==1)                  // Рисуем линию
        {   
            for (number; number!=0; number--)
            cout<<symbol<<"\n"; 
        }
        else if (type_l==2) 
        {
            for (number; number!=0; number--)
            cout<<symbol;
        }
        else cout<<"Неправильно введен тип линии";
        cout<<"\n Для выхода введите \"exit\" для продолжения работы введите любой другой символ \n";
        cin>>exit;
        if (exit=='exit') break;
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Байт
 Аватар для Байт
13974 / 8805 / 1227
Регистрация: 24.12.2010
Сообщений: 15,949
24.06.2014, 11:50     Выход из бесконечного цыкла #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от EfimKR Посмотреть сообщение
if (exit=='exit') break;
Как твой компилятор вообще это пропускает - непонятно
C++
1
2
3
4
char ex[10];
...
cin >> ex;
if (strcmp(ex, "exit")==0) break;
exit кажется, ключевое слово...
Pjeroo
Землянин
 Аватар для Pjeroo
33 / 33 / 12
Регистрация: 15.01.2013
Сообщений: 313
24.06.2014, 11:56     Выход из бесконечного цыкла #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
EfimKR, тип char может содержать только одну букву, а Вы пытаетесь туда запихать все слово. Условие не выполняется, потому что при вводе "exit" в переменную exit записывается только первая буква 'e'.

Добавлено через 1 минуту
Цитата Сообщение от Байт Посмотреть сообщение
exit кажется, ключевое слово...
Да, но компилятор GCC не ругается.
Байт
 Аватар для Байт
13974 / 8805 / 1227
Регистрация: 24.12.2010
Сообщений: 15,949
24.06.2014, 11:57     Выход из бесконечного цыкла #4
Цитата Сообщение от Pjeroo Посмотреть сообщение
при вводе "exit" в переменную exit записывается только первая буква 'e'
Это понятно. Но вот как компилятор не ругается на 'exit' ??? В одинарных кавычках должон стоять один символ...
Pjeroo
Землянин
 Аватар для Pjeroo
33 / 33 / 12
Регистрация: 15.01.2013
Сообщений: 313
24.06.2014, 12:01     Выход из бесконечного цыкла #5
Цитата Сообщение от Байт Посмотреть сообщение
Но вот как компилятор не ругается на 'exit'
Смею предположить, что не ругается, потому что название exit используется методом exit(), а в данном случае переменная.
EfimKR
 Аватар для EfimKR
48 / 21 / 10
Регистрация: 24.06.2014
Сообщений: 210
Записей в блоге: 1
24.06.2014, 12:09  [ТС]     Выход из бесконечного цыкла #6
Всём спасибо, всё работает, всё понял. =)
Байт
 Аватар для Байт
13974 / 8805 / 1227
Регистрация: 24.12.2010
Сообщений: 15,949
24.06.2014, 12:09     Выход из бесконечного цыкла #7
Цитата Сообщение от Байт Посмотреть сообщение
exit кажется, ключевое слово...
Простите, тут я не прав. exit - это функция. а не ключевое слово. А ее можно переопределять. Но то, что в одинарных кавычках несколько букв - это странно...

Не по теме:

Впрочем, сие не стоит затяжной дискуссии... Просто лучше такими конструкциями не пользоваться от греха подальше...

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2014, 12:30     Выход из бесконечного цыкла
Еще ссылки по теме:

C++ Как понимать условие цыкла while(1) ?
Сумма бесконечного ряда C++
Отладка бесконечного цикла C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.06.2014, 12:30     Выход из бесконечного цыкла #8
Цитата Сообщение от Байт Посмотреть сообщение
Но то, что в одинарных кавычках несколько букв - это странно...
Это multicharacter literal.
см. например тут
P.S. обсуждалось уже несколько на раз на форуме на моей памяти.
Yandex
Объявления
24.06.2014, 12:30     Выход из бесконечного цыкла
Ответ Создать тему
Опции темы

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