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

как избежать зацикливания - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Программа перевода числе в арабскую СС и обратно http://www.cyberforum.ru/cpp-beginners/thread870622.html
Написать программу, которая выполняет ввод текстовой информации из файла или стандартного потока ввода, осуществляет преобразование информации в соответствии с вариантом задания (см. ниже) и выводит...
C++ Сортировка и выписка в структурах Как сделать выписку сотрудников, выданная зарплата которых не превышает число введенное с клавиатуры? И по поводу сортировки: вот main и сама структура #include <iostream> #include <iomanip> ... http://www.cyberforum.ru/cpp-beginners/thread870615.html
C++ Перегрузка операции ввода и вывода. Выдает ошибку
Совместил сразу перегрузку двух операций, выдало дофига ошибок. В чем проблема, помогите разобраться. #include <iostream> using namespace std; class coord { int x,y,z; public: ...
Текстовые файлы и палиндромы в С++ C++
Имеется текстовый файл, содержащий текст на русском языке. найти в нем слова+палиндромы (<<перевертыши>>), одинаково читающиеся как слева направо, так и справа налево, например, АННА,ШАЛАШ и так...
C++ Односвязный список в список http://www.cyberforum.ru/cpp-beginners/thread870591.html
Всем привет. Гугл мне ответа не дал. Не понимаю, как один список вставить в другой и как передвигаться по нему? В одном списке хранится массив символов и интовское число. В другом должен...
C++ Объяснить программу (готовая). Дана строка символов. Подсчитать общее число вхождений символов Приветствую всех. Пользователь под ником Croessmah очень сильно помог мне в получении программы (а именно сам её предоставил), но в ней я мало что понимаю, ну хотя кое что понимаю.. Может кто нибудь... подробнее

Показать сообщение отдельно
Serg22
103 / 103 / 31
Регистрация: 04.03.2013
Сообщений: 479
Завершенные тесты: 2
19.05.2013, 18:40  [ТС]
Вот сам код: в 1м основном меню (там где выбор массив или список) при вводе буквы прога завершает свое действие. А вот уже в моих ф-циях MainArray и MainStruct при вводе буквы происходит зацикливание..
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.h>
#define N 1000
 
 
// Структура елементу черги
typedef struct node_t
{
   int value; // значення елемента
   struct node_t* next; // покажчик на наступний елемент в черзі.
}  Node;
 
typedef struct queue_t
{
   Node* head; // Покажчик на голову черги
   Node* tail; // Покажчик на хвіст черги
}  Queue;
 
//-----------------------------------------------------------------------------
// Фунция додавання елементу в чергу.
Queue* Push_Queue_List(Queue* queue, int value)// Value - значення, яке потрібно помістити в чергу.
{
   Node* tempNode = (Node*) malloc(sizeof(Node));//Створюється новий елемент черги.
   tempNode->value = value; //Заповнюється інформаційне поле.
   tempNode->next = NULL; //Після tempNode елементів немає.
 
   if (queue->head && queue->tail) // Якщо черга не порожня, то
   {
      queue->tail->next = tempNode; // наступним елементом після хвоста черги стає tempNode
      queue->tail = tempNode;
   }
   else
   {
      queue->head = queue->tail = tempNode; //інакше tempNode стає головою черги.
   }
 
   return queue;
}
//-----------------------------------------------------------------------------
int Del_QueueElement_List(Queue* queue) // Функція видалення елемента з черги. 
{
   int value = 0; 
 
   if (queue->head) // Перевірка, чи не порожня черга.
   {
      value = queue->head->value;
      queue->head = queue->head->next;;// Встановлюємо як голову черги елемент який був наступним після голови.
 
   }
 
   return value; //  повертає елемент черги, що був видалений
}
//-----------------------------------------------------------------------------
int Find_Queue_List(Queue* queue, int value) // Функція пошуку елемента в черзі 
{
   Node* tempNode = queue->head; // починаємо з першого елемента черги
 
   int i = 0; // лічильник циклу (номер позиції елемента)
   for (; tempNode && (tempNode->value != value); tempNode = tempNode->next) // Цикл пошуку елемента в черзі
   {
      i++;
   }
 
   return tempNode ? i : -1; // якщо tempNode != 0 return повертає i,  інакше -1 (тернарний оператор )
}
//-----------------------------------------------------------------------------
void Print_Queue_List(const Queue* queue) // Функція виводу черги на екран
{
   const Node* tempNode = queue->head; //встановлюєму тимчасову змінну на початок черги
            printf("Очередь:"); 
   for (; tempNode; tempNode = tempNode->next)// просуваємося по черзі
   {  
      printf(" %d ", tempNode->value); // виводимо на екран елементи по черзі
   }
   printf("\n");
}
//-----------------------------------------------------------------------------
 
int mainStruct() // головна функція черги на базі списку
{
    Queue queue = {NULL, NULL}; // Ініціалізація порожніми елементами
 for (;;){ // цикл для меню
    printf("Операции над очередью:\n"  // меню з операціями над чергою
          " 1. Добавить элемент\n"
          " 2. Просмотр очереди\n"
          " 3. Удалить элемент\n"
          " 4. Поиск элемента\n"
          " 0. Выход\n");
 
   int S; int value;
 
   {
      printf("Комманда> ");
      scanf("%d",&S);
 
      switch (S) // цикл вибору ф-ції , залежно від вибраного S значення
      {
  case 1:  //додавання елемента в чергу
           printf("элемент> ");
           if (scanf("%d", &value))
           {
               Push_Queue_List(&queue, value);
           }
           break;
 
   case 2: // вивід черги на екран
            Print_Queue_List(&queue);
            break;
 
   case 3: // видалення елемента з черги
            printf("Удален:  %d\n", Del_QueueElement_List(&queue));
            break;
 
   case 4: // пошук елемента в черзі
            printf("Поиск>  ");
            if (scanf("%d", &value))
            {
               int pos = Find_Queue_List(&queue, value);
 
               if (pos != -1)
               {
                  printf("%d-й в очереди\n", pos + 1);
               }
               else
               {
                  printf("Элемент %d не найден\n", value);
               }
            }
            break;
   case 0: return 0; //вихід
            
         
      }
   }
 }
}
 
//кінець черги на базі списку
//------------------------черга на базі масиву------------------------------------------
 
void Push_Queue_Array(int mas[],int *kol,int *end) // Фунция додавання елементу в чергу.
{
if((*kol)==N){ // якщо kol - кількість елементів дорівнює к-ті місць у черзі, то 
    printf("\nОчередь заполнена!\n");} // повідомлення, що черга повна
else{ 
    printf("\nВведите элемент очереди:   ");
    scanf("%d",&mas[(*end)]); // додає введене значення в кінець черги
    (*kol)++; // збільшуємо лічильник кількості елементів на 1
    (*end)++;}
}
void Find_Queue_Array(int mas[],int end, int start)// Функція пошуку елемента в черзі 
{ 
    int f,i,pos=-1;
    printf("Введите искомое число:   ");
    scanf("%d",&f);// вводимо шукане значення
    
    for (i=start;i<end;i++)// цикл пошуку елемента, починаючи з початку черги
        
    if(mas[i]==f)// якщо елемент знайдений, то
        {
        pos = i-start;
        break; // кінець циклу
        
    }
 
    if(pos != -1)
        printf("Элемент  %d-й в очереди\n",pos+1);// повертаємо номер позиції
    else 
        printf("Элемента нет\n"); // якщо елемент не знайдений, то ф-ція повертає -1
}
 
 
 
void Print_Queue_Array(int mas[],int end,int start,int kol)//Функція виводу черги на екран
{
 printf("\nОчередь:   ");
 int i,j;//лічильники циклу
 j=0;
  for(i=start;i<end;i++,j++)//від початку до кінця
  {
   if(j<kol)//друкуємо елементи, доки їх кількість більша за j
   printf("%d ",mas[i]);
   
  }
  printf("\n");
}
 
 
void Del_QueueElement_Array(int mas[],int *kol,int *start)// Функція видалення елемента з черги. 
{
if((*kol)==0)// якщо кількість елементів в черзі = 0,то
{
printf("\n0 элементов в очереди!\n");// вивести повідомлення, що черга порожня
}
else// інакше
{
printf("Удален элемент %d\n",mas[(*start)]);//видаляємо елемент, що стоїть перший в черзі
(*start)++;//наступний елемент у черзі стає першим
(*kol)--;//зменшуємо лічильник кількості елементів у черзі на 1
}
}
 
int mainArray()// головна функція черги на базі масива
{ 
setlocale (LC_ALL, "Russian");//Російська мова
int mas[N];//масив, розмірністю N(1000)
int s,n=0,start=0,end=0;//змінні кінця,початку,циклу
for(;;)//цикл меню
{
 
printf("Операции над очередью:\n" // меню з операціями над чергою
          " 1. Добавить элемент\n"
          " 2. Просмотр очереди\n"
          " 3. Удалить элемент\n"
          " 4. Поиск элемента\n"
          " 0. Выход\n");
printf("Комманда> ");
scanf("%d",&s);
switch(s)
{
case 1:Push_Queue_Array(mas,&n,&end);break;//додавання елемента в чергу
case 2:Print_Queue_Array(mas,end,start,n);break;// вивід черги на екран
case 3:Del_QueueElement_Array(mas,&n,&start);break;// видалення елемента з черги
case 4:Find_Queue_Array(mas,end,start);break;// пошук елемента в черзі
case 0:return 0;//вихід
}
}
 
 
}
 
int main()//головна функція програми
{ setlocale(LC_ALL, "Russian");//Російська мова
    printf("С очередью на какой базе вы желаете работать?\nМассива - нажмите 1\n Списка - нажмите 2\n0 - выход\n Ваш выбор:\t ");
    int P;
    scanf("%d",&P);
    switch(P){
    case 1:mainArray();break;// черга на базі масива
    case 2:mainStruct();break;// черга на базі списка
    case 0:return 0;//вихід
}
}
Добавлено через 52 секунды
henecs, Эмм.. я дописывал
C#
1
default:
не помогает в этом случае...
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru