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

Программа в windows выполняется нормально, а в UNIX возникает бесконечный цикл - C++

Восстановить пароль Регистрация
 
orange_fox
 Аватар для orange_fox
34 / 34 / 6
Регистрация: 06.04.2014
Сообщений: 189
13.04.2014, 22:57     Программа в windows выполняется нормально, а в UNIX возникает бесконечный цикл #1
Суть программы - меню из 5 пунктов.
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include <cstdlib>
#include <iostream>
#include <string>
#include <algorithm>
 
#ifdef _WIN32
#define CLEAR_SCREEN "cls"
#else
#define CLEAR_SCREEN "clear"
#endif
 
#define NOTSET 0
#define DELETED 1
#define EXIST 2
 
using namespace std;
 
bool END = false, CONT = true;
short int STATUS = NOTSET;
string str = "";
 
void prepare_cin()
{
    cin.clear();
    cin.sync();    
}
char _ch()
{
    prepare_cin();
    char ch = 'a';
    cin.get(ch);
    return ch;  
}
bool checkStr()
{
     switch ( STATUS )
     {
            case NOTSET: cout << "Ошибка: строка не была введена!\n"; return false;
            case DELETED: cout << "Ошибка: строка была удалена ранее!\n"; return false;
            case EXIST: return true;
            default: cout << "Ошибка статуса\n"; return false;
     }
}
 
void delete_str()
{
     if ( checkStr() )
     {
          cout << "Строка \n\"" << str << "\"\nбыла удалена\n";
          str = "";
          STATUS = DELETED;
     }
}
 
void input_str()
{
     if ( STATUS == EXIST ) cout << "Строка уже существует. Вот она:\n" << str << endl;
     else
     {
         string tmp = "";
         cout << "Введите строку, ограничение - 1000 символов\n";
         prepare_cin(); getline ( cin, tmp );
         if ( tmp.length() > 1000 ) cout << "Ваша строка больше 1000 символов. Она будет автоматически обрезана\n";
         str = tmp.substr (0, 1000);
         STATUS = EXIST;
         cout << "\nВведённая строка:\n" << str << endl;
     }
}
 
void find_str()
{
     if ( checkStr() )
     {
         cout << "Введите подстроку, которую вы хотите найти\n";
         string sub = "";
         prepare_cin(); getline(cin, sub);
         int pos = str.find(sub);
         if (pos == -1)
                cout << "Подстрока не найдена" << endl;
         else
         {
             cout << "Строка с выделенным результатом поиска: \n" <<
                 str.substr(0, pos) << "\n------>" <<
                 str.substr(pos, sub.length()) << "<------\n" <<
                 str.substr(pos + sub.length()) << endl;
         }
     }
}
 
void sort_str()
{
     if ( checkStr() )
     {
        for (int i = 0; i < str.size(); i++) //Удаление пробелов из строки          
        {                                                   
            if (str.at(i) == ' '){ str.erase(i, 1); i--; }  
        }                                               
        sort(str.begin(), str.end());
        cout << "Результат: " << str << std::endl;
     }  
}
 
int menu()
{
    system (CLEAR_SCREEN);
    cout <<
    "Внимание! Ввод русских символов в widnows неправильно работает.\nНо вы можете попробовать :)\n\n"
    "\tМеню:\n"
    "1. Ввести новую строку\n"
    "2. Удалить строку\n"
    "3. Найти подстроку\n"
    "4. Отсортировать строку\n"
    "0. Завершить программу\n"
    "\nВведите команду: ";
    char answer = _ch();
    cout << "\n";
    switch (answer)
    {
    case '1': input_str(); break;
    case '2': delete_str(); break;
    case '3': find_str(); break;
    case '4': sort_str(); break;
    case '0': END = true; return 0;
    default: cout << "Неверный символ" << endl;
    }
    cout << "\nВведите 0, чтобы завершить программу или любой другой символ, чтобы продолжить.\n";
    char exit_ = _ch();
    if ( exit_ == '0' ) END = true;
} 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    while ( !END ) menu();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.04.2014, 22:57     Программа в windows выполняется нормально, а в UNIX возникает бесконечный цикл
Посмотрите здесь:

Бесконечный цикл C++
Программа входит в бесконечный цикл при изменении двумерного массива C++
Метод Ньютона - программа уходит в бесконечный цикл C++
C++ Бесконечный цикл for
Программа работает неправильно. Цикл не выполняется. Подскажите ошибку C++
C++ Некорректно работает программа. Бесконечный цикл
C++ Бесконечный цикл While
C++ Объяснить почему при заполнении матрицы программа уходит в бесконечный цикл
Объяснить почему программа уходит в бесконечный цикл (связные списки) C++
Передача массивов в функцию: почему программа уходит в бесконечный цикл? C++
C++ Почему если в консоли ввести вместо числа любой символ, программа впадает в бесконечный цикл?
C++ Найти и исправить ошибки в коде (программа уходит в бесконечный цикл)

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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