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

Как исправить ошибочку?? )) - C++

Восстановить пароль Регистрация
 
|| Flashka ||
 Аватар для || Flashka ||
2 / 2 / 0
Регистрация: 03.03.2010
Сообщений: 94
13.05.2010, 20:49     Как исправить ошибочку?? )) #1
всем привет!!! )) Помогите исправить ошибочку!! У меня есть 2 программки - сервер и клиент. Клиент принимает элементы вектора и ключ для поиска, и отсылает серверу. Сервер принимает это все и ищет элемент по ключу!

Сервер:
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
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <time.h>
 
#define MAX_QUANTITY 100
#define ELEMENT       -1
#define ONE            1
#define NULL           0
 
using namespace std;
 
HANDLE Mailslot;
DWORD NumberOfBytesRead;
 
int g_KeySearch;
int searchBinary(int* p_Array, int g_KeySearch, int functionAr1, int functionAr2);
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_CTYPE,"Russian");
    printf("\n\nОжидание...\n\n");
 
    int arrayOfNumbers[MAX_QUANTITY];
    int tmp, searchingNumber, position;
    int  theLeftElement
        ,ridhtElement
        ,number     = NULL
        ,buffer     = NULL
        ,variable1  = NULL
        ,variable2  = NULL;
    int sizeOfaFile = NULL;
    int *numberOfaFile;
    bool CorrectnessCheck;
 
    HANDLE Mailslot;
    DWORD NumberOfBytesRead;
 
    // Создание почтового ящика и бесконечное ожидание сообщений
    if ((Mailslot = CreateMailslot(L"\\\\.\\Mailslot\\slot1", 0,
        MAILSLOT_WAIT_FOREVER, NULL)) == INVALID_HANDLE_VALUE)
    {
        printf("Ошибка при создании %d\n", GetLastError());
        return ONE;
    }
 
    // Бесконечное чтение данных из ПЯ!
    if(ReadFile(Mailslot, &numberOfaFile, sizeof(numberOfaFile), &NumberOfBytesRead,
        NULL) == 0)
    {
        cout<<"Ошибка!!! ";
        getch();
        return ONE;
    }
 
   printf("\nПолучено\n");
 
   cout << endl;
   position = searchBinary(arrayOfNumbers
                            , -858993460, 0
                            , MAX_QUANTITY - 1
                            );
    position != -1 ? cout << "Искомая позиция: " << position+1
                   : cout << "Нет такого элемента!"
                   ;
    CloseHandle (Mailslot);
    getch();
    return NULL;
}
int searchBinary(int* p_Array, int g_KeySearch, int head, int tail)
{ 
    int currPosition = ELEMENT;
    if ((tail == head) && (p_Array[tail] != g_KeySearch )) 
    {
        return ELEMENT;
    }
    else 
    {
        currPosition = (head+tail)/2;
        if (g_KeySearch == p_Array[currPosition])
        {
            return currPosition;
        }
        else 
        {
            if (g_KeySearch > p_Array[currPosition]) 
            {
                currPosition = searchBinary(p_Array, g_KeySearch, head, currPosition);
            }
            else
            {
                currPosition = searchBinary(p_Array, g_KeySearch, currPosition+1, tail);
            }
        }
    }
}
Клиент:

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
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <stdio.h>
 
#define MAX_QUANTITY 100
#define ONE            1
#define NULL           0
 
HANDLE Mailslot;
DWORD NumberOfBytesRead;
 
int g_KeySearch;
using namespace std; 
 
int searchBinary(int* p_Array, int g_KeySearch, int functionAr1, int functionAr2);
 
int main(int argc, char* argv[])
{
setlocale(LC_CTYPE,"Russian");
 
    int arrayOfNumbers[MAX_QUANTITY];
    int tmp, searchingNumber = NULL, position;
    int  theLeftElement
        ,ridhtElement
        ,number     = NULL
        ,buffer     = NULL
        ,variable1  = NULL
        ,variable2  = NULL;
    int sizeOfaFile = NULL;
    int *numberOfaFile;
    bool CorrectnessCheck;
 
     do
    {
        cout << "\nВведите размер массива: ";
        cin.clear();
        cin >> sizeOfaFile;
        fflush(stdin);
 
        if(!cin.good())
        {
                cout<<"\n>>Ошибка!!! Размер должен быть числом!\n";
                cout<<"\n>>Пожалуйста, введите число. \n";
                CorrectnessCheck = false; 
        }
            else CorrectnessCheck = true; 
            }
      while (!CorrectnessCheck); 
 
      numberOfaFile = (int *) malloc (sizeOfaFile);
 
      cout << "\nВведите элементы массива: ";
 
    for( int theLeftElement=0; theLeftElement<
             sizeOfaFile; ++theLeftElement)
    {
            do
            {
                cin.clear();
                cin >> arrayOfNumbers[theLeftElement];
                fflush(stdin);
            if(!cin.good())
            {
              cout<<"\n>>Ошибка!!! Элементы должны быть числом!\n";
              cout<<"\n>>Пожалуйста, введите число. \n";
              CorrectnessCheck = false; 
            }
            else CorrectnessCheck = true; 
            }while (!CorrectnessCheck);
     } 
 
    // просматриваем элемент от начала до конца, массив начинается с 0
    for (theLeftElement = 0; theLeftElement < 
         MAX_QUANTITY-1; theLeftElement++) 
    {
        // просматриваем массив со следующего от текущего положения элемента
        for (ridhtElement = theLeftElement+1; ridhtElement < 
             MAX_QUANTITY; ridhtElement++) 
        {
            // если левый элемент меньше чем правый, то меняем их местами
            // т.о. меньшие элементы всплывают к концу массива
            if (arrayOfNumbers[theLeftElement] < 
                arrayOfNumbers[ridhtElement]) 
            {
                tmp = arrayOfNumbers[theLeftElement];
                arrayOfNumbers[theLeftElement] = arrayOfNumbers[ridhtElement];
                arrayOfNumbers[ridhtElement] = tmp; 
            }
        }
            if (arrayOfNumbers[theLeftElement] != buffer) 
            {
                buffer = arrayOfNumbers[theLeftElement];
                variable2 = 1;
            }
            else 
            {
                variable2++;
            if (variable2 > variable1)
            {
            number = buffer;
            variable1 = variable2;
            }
        }
 
    }
    
    for (theLeftElement=0; theLeftElement < sizeOfaFile; theLeftElement++) 
    {
        cout << arrayOfNumbers[theLeftElement] << " ";
    }
 
        do
        {    
            cout << endl << endl << "Введите ключ для поиска: ";
            cin.clear();
            cin >> searchingNumber;
            fflush(stdin);
 
            if(!cin.good())
            {
                cout<<"\n>>Ошибка!!! Ключ должны быть числом!\n";
                cout<<"\n>>Пожалуйста, введите число. \n";
                CorrectnessCheck = false; 
            }
            else CorrectnessCheck = true; 
            }while (!CorrectnessCheck);
 
    cout << endl;
 
        HANDLE Mailslot;
        DWORD BytesWritten;
    if ((Mailslot = CreateFile(L"\\\\.\\Mailslot\\slot1", GENERIC_WRITE,
        FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
        NULL)) == INVALID_HANDLE_VALUE)
                    {
        printf("Создание файла с ошибкой %d\n", GetLastError());
                getch ();
        return ONE;
    }
    if (WriteFile(Mailslot, &numberOfaFile,
           sizeof (numberOfaFile), &BytesWritten, NULL) == 0)
    {
        printf("Запись в файл с ошибкой %d\n", GetLastError());
        return ONE;
    }
 
        cout<<"\n Данные переданы... ";
        getch();
    CloseHandle(Mailslot);
    return NULL ;
}
Так вот сервер на любые значния выдает одно и то же значение!!! ((( В чем проблема?? Подскажите пожалуйста!! ))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2010, 20:49     Как исправить ошибочку?? ))
Посмотрите здесь:

C++ Наибольший общий делитель!Нужно исправить ошибочку
C++ Как исправить!
нужно найти ошибки в задаче на языке C/ их в районе 10 как выдает компилятор но я не могу их исправить (не знаю как) C++
задачка на множества.значения выводятся и как-будто бегут.как исправить? C++
Как исправить ошибку? C++
C++ Найти ошибочку. Нахождение суммы цифр вещественного числа
Как исправить ошибку? C++
C++ Как исправить ошибки?

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

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

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