Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Hazelnutik
0 / 0 / 0
Регистрация: 13.06.2015
Сообщений: 3
1

Как очистить значение переменной после цикла?

13.05.2017, 01:15. Просмотров 524. Ответов 2
Метки нет (Все метки)

Задача такая. Создаем приложение TCP/IP. Клиент посылает слово серверу, сервер возвращает его назад в обратном порядке букв. НО! Момент ввода слова нужно зациклить. Так-то я сделала, но при каждом последующем вводе значение строки остается прежним, как его обнулить?

Ввести глобальную переменную не получилось. ПАМАГИТЕ! Намучилась не могу уже

Сервер:
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
#define _CRT_SECURE_NO_DEPRECATE 1
 
#include <iostream>
 
#include <string>
 
#include <algorithm>
 
#include <winsock2.h>
 
#pragma comment(lib, "ws2_32.lib")
 
using namespace std;
 
int main()
 
{
 
    // максимальный номер версии WinSock
 
    WORD wVersionRequested;
 
    // структура для WSAStartup
 
    WSADATA wsaData;
 
    // инициализируем WinSock API
 
    wVersionRequested = MAKEWORD(2, 2);
 
    WSAStartup(wVersionRequested, &wsaData);
 
    // Создаем серверный сокет
 
    SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
 
    // Создаем структуру данных соединения
 
    struct sockaddr_in local;
 
    // Поле sin_family всегда имеет значение AF_INET
 
    local.sin_family = AF_INET;
 
    // Слушаем 1280 порт
 
    local.sin_port = htons(1280);
 
    // Слушаем все сетевые соединения
 
    local.sin_addr.s_addr = htonl(INADDR_ANY);
 
    // Связываем сокет с соединением
 
    int c = bind(s, (struct sockaddr*)&local, sizeof(local));
 
    // Инициализируем прослушивание сокета
 
    int r = listen(s, 5);
 
    // Запускаем бесконечный цикл сервера
 
    while (true) {
 
        char b[255];
 
        // Структура определяет удаленный адрес, с которым соединяется сокет
 
        sockaddr_in remote_addr;
 
        int size = sizeof(remote_addr);
 
        // Открытие сокета для запроса клиента
 
        SOCKET s2 = accept(s, (struct sockaddr*)&remote_addr, &size);
 
        // Принимаем данные через сокет
 
        while (recv(s2, b, sizeof(b), 0) != 0) {
 
            // Переворачиваем строку
 
            string str(b);
 
            reverse(str.begin(), str.end());
 
            // Посылает данные на соединенный сокет
 
            send(s2, str.c_str(), str.length() + 1, 0);
 
        }
 
        // Завершаем работу сокета
 
        closesocket(s2);
 
    }
 
    // Завершаем использование WinSock DLL
 
    WSACleanup();
 
    return 0;
 
}
Клиент:
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
#include <winsock2.h>
 
#include <iostream>
 
#include <string>
 
#include <stdlib.h>
 
#include <conio.h>
#include "Source.h"
 
#pragma comment(lib, "ws2_32.lib")
 
using namespace std;
 
int main() {
 
    // максимальный номер версии WinSock
 
    WORD wVersionRequested;
 
    // структура для WSAStartup
 
    WSADATA wsaData;
 
    // инициализируем WinSock API
 
    wVersionRequested = MAKEWORD(2, 2);
 
    WSAStartup(wVersionRequested, &wsaData);
 
    // Создаем структуру данных соединения
 
    struct sockaddr_in peer;
 
    // Поле sin_family всегда имеет значение AF_INET
 
    peer.sin_family = AF_INET;
 
    // Обращаемся через порт 1280
 
    peer.sin_port = htons(1280);
 
    // т.к. клиент и сервер на одном компьютере, пишем адрес 127.0.0.1
 
    peer.sin_addr.s_addr = inet_addr("127.0.0.1");
 
    // Создаем клиентский сокет
 
    SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
 
    // Подключаемся к серверу
 
    connect(s, (struct sockaddr*) &peer, sizeof(peer));
 
    string sBuff;
 
    char b[255];
    char ch = 'y'; // переменная цикла
    while (ch == 'y') // цикл ввода
    {
    cout << "\n Enter the word: ";
 
    getline(cin, sBuff);
 
    // Отправляем строку на сервер для обработки
 
    send(s, sBuff.c_str(), sBuff.length() + 1, 0);
 
    // Получаем ответ от сервера
    cout << "\n Result: ";
    if (recv(s, b, sizeof(b), 0) != 0) {
 
        b[strlen(b)] = '\0'; // Удаление ненужных символов в конце строки
        
        
        cout << b << endl;
 
    }
    
    // Завершаем работу сокета
 
    closesocket(s);
 
    // Завершаем использование WinSock DLL
 
    WSACleanup();
 
    cout << "\n Return? y/n ";
    cin >> ch;
    }
    getchar();
    return 0;
    
}
0
Миниатюры
Как очистить значение переменной после цикла?  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2017, 01:15
Ответы с готовыми решениями:

Как очистить консоль после итерации цикла?
Как очистить консоль в С++ после итерации цикла или перед функцией,чтобы...

Значение переменной после окончания цикла
Чему будет равно i после окончания цикла: for (i=30;i&gt;=10;i--); тело цикла;...

Каково значение переменной после работы цикла
Где то когда то читал, что значение переменной цикла после его окончания...

Определить значение переменной после выполнения цикла while
Определить значение переменной s после выполнения следующих операторов: s=0;...

Как вычленить значение переменной из цикла?
Вводится текст. Программа показывает подтекст с элемента N до элемента M. N и M...

2
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,045
13.05.2017, 03:51 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
    while (ch == 'y') // цикл ввода
    {
        cout << "\n Enter the word: ";
 
        getline(cin, sBuff);
        
        // Отправляем строку на сервер для обработки
 
        send(s, sBuff.c_str(), sBuff.length() + 1, 0);
 
        // Получаем ответ от сервера
        cout << "\n Result: ";
        if (recv(s, b, sizeof(b), 0) != 0) 
        {
            b[strlen(b)] = '\0'; // Удаление ненужных символов в конце строки
            cout << b << endl;
        }
        cout << "\n Return? y/n ";
        (cin >> ch).get();
    }
    // Завершаем работу сокета
 
    closesocket(s);
 
    // Завершаем использование WinSock DLL
 
    WSACleanup();
1
Hazelnutik
0 / 0 / 0
Регистрация: 13.06.2015
Сообщений: 3
13.05.2017, 12:07  [ТС] 3
Большое спасибо все заработало)))))
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2017, 12:07

Очистить значение переменной для дальнейшего использования
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() {...

Как "выдрать" значение переменной из цикла
В общем. Есть глобальная переменная. Есть цикл в одной из функций, где значение...

Переменной типа int при первой итерации цикла приписывается значение меньше на 1
Доброго времени суток. Возникла проблема которую видно на скриншоте....


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

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

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