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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
orange_fox
34 / 34 / 6
Регистрация: 06.04.2014
Сообщений: 189
#1

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

13.04.2014, 22:57. Просмотров 164. Ответов 0
Метки нет (Все метки)

Суть программы - меню из 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.04.2014, 22:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа в windows выполняется нормально, а в UNIX возникает бесконечный цикл (C++):

Почему при вводе числа программа работает нормально, а при вводе буквы уходит в бесконечный цикл? - C++
void mainmenu() { cout &lt;&lt; &quot;Введи число&quot; &lt;&lt; endl; cin &gt;&gt; choice; if (choice == 1) { cout &lt;&lt; &quot;Hello&quot; &lt;&lt; endl; } ...

Некорректно работает программа. Бесконечный цикл - C++
Код запускается, но после ввода данных просто ничего не происходит, не вылетает, не выдает ошибку. Помогите, что не так? Уверен ошибка...

Метод Ньютона - программа уходит в бесконечный цикл - C++
Подскажите где туплю, уже недели две над этой прогой сижу, а оно всё не работает хоть убей.... получается в бесконечный цикл заводит,...

Программа входит в бесконечный цикл при изменении двумерного массива - C++
Написал код для задания: &quot;Ввести двумерный массив А (NxM). Каждый второй элемент в массиве с нечётной суммой индексов, чьё значение лежит в...

Объяснить почему программа уходит в бесконечный цикл (связные списки) - C++
Всем привет. Собрал связанный список, он работает, но при вводе типа char, программа уходит в бесконечный цикл. Без данного типа...

Найти и исправить ошибки в коде (программа уходит в бесконечный цикл) - C++
#include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; int main() { int n,k,s; float a,b,c,F; cout&lt;&lt;&quot;vvedite...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2014, 22:57
Привет! Вот еще темы с ответами:

Передача массивов в функцию: почему программа уходит в бесконечный цикл? - C++
Всем здравствуйте, спасибо, что проявили к моей теме интерес. у меня вопрос и даже не один. для начала код, который работает, после...

Объяснить почему при заполнении матрицы программа уходит в бесконечный цикл - C++
#include &lt;iostream&gt; using namespace std; int main() { int mas; for (int i = 0; i &lt; 3;) { for (int j = 0; j &lt; 4;j++) ...

Почему если в консоли ввести вместо числа любой символ, программа впадает в бесконечный цикл? - C++
Всем привет! Недавно начал изучать С++ и столкнулся с проблемой при создании калькулятора. Если в консоли ввести вместо числа любой...

Программа работает неправильно. Цикл не выполняется. Подскажите ошибку - C++
Здравствуйте. Подскажите, пожалуйста, почему неправильно выполняется программа( не выполняется цикл). Заранее спасибо. #include...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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