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

Прочитать никнейм из файла и после использования - удалить - C++

Восстановить пароль Регистрация
 
 
javse95
0 / 0 / 0
Регистрация: 02.08.2013
Сообщений: 35
20.01.2014, 01:10     Прочитать никнейм из файла и после использования - удалить #1
Имеется такой код. к нему нужно написать цикл. Существует файл Nicknames.txt в котором на каждой строчке написано по нику. смысл цикла таков. Из файла Nicknames.txt берется первая строка с ником и подставляется в переменную Nickname, если выполняется это
C++
1
 sampConnect(settings.server.szAddr, settings.server.iPort, Nickname, settings.server.szPassword, pRakClient);
то после этой процедуры надо удалить использованный ник из файла Nicknames.txt и подставить следующую строчку с ником в переменную Nickname, если же выполняется условие else, то нужно использующуюся строку с ником переместить в конец файла Nicknames.txt, а в переменную NewNickname подставить следующую строчку с ником. вот сам код
C++
1
2
3
4
5
6
7
8
9
if(!iConnectionRequested)
        {
            if(!iGettingNewName)
                sampConnect(settings.server.szAddr, settings.server.iPort, Nickname, settings.server.szPassword, pRakClient);
            else
                sampConnect(settings.server.szAddr, settings.server.iPort, NewNickname, settings.server.szPassword, pRakClient);
 
            iConnectionRequested = 1;
        }
Написал довольно таки бредово. Если что не понятно спросите.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2014, 01:10     Прочитать никнейм из файла и после использования - удалить
Посмотрите здесь:

C++ Прочитать программу на языке C++ и удалить все комментарии
Удалить из файла все цифры, если они следуют после знаков препинания. C++
в классе создаётся объект оператором new, как его удалить после использования в основной программе? delete в вызывающей функции не вариант! C++
C++ как можно прочитать файл в обратном порядке т.е. стать в конец файла и прочитать до начальной позиции?
C++ Из текстового файла прочитать четные числа и записать их в другой файл без использования массива (код С++)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
20.01.2014, 06:57     Прочитать никнейм из файла и после использования - удалить #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
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
int main()
{
    string value[100];
    int counter = 0;
    ifstream f("Nicknames.txt");
    while(true)
    {
        if(!f.eof())
        {
            f >> value[counter];
            counter++;
        }
        else
            break;
    }
    
    for(int i = 0; i < counter - 1; i++)
    {
        if(...............) //Одно из условий.
        {
            for(int j = i; j < counter - 1; j++)
            {
                if(value[j + 1] == "")
                    break;
                string temp;
                temp = value[j];
                value[j] = value[j + 1];
                value[j + 1] = temp;               
            }
        }   
    }
 
    system("pause");
    return 0;
}
К примеру, можно записать строки с именами из текстовика в массив.
Здесь при нужном условии элемент перенесётся в конец и будет проверяться следующий.
Можно добавить ещё массив и записывать туда.
В конце перезаписать текстовик элементами массива.
javse95
0 / 0 / 0
Регистрация: 02.08.2013
Сообщений: 35
21.01.2014, 00:20  [ТС]     Прочитать никнейм из файла и после использования - удалить #3
Спасибо за ответ, но не знаю как все это связать с моим кодом. Как именно задать эти переменные Nickname и NewNickname чтобы они меняли свои значения после выполнения одной из операций.
C++
1
2
3
4
5
6
7
8
9
10
if(!iConnectionRequested)
        {
        char *Nickname, *NewNickname;
                
            if(!iGettingNewName)
                sampConnect(server, port, Nickname, password, client);// если выполнилось это, то удаляем использованную строчку, подставляем слудующую.
            else
                sampConnect(server, port, NewNickname, password, client);// если выполнилось это, то перемещаем использованную строчку в конец, подставляем следующую.
            iConnectionRequested = 1;
        }
Добавлено через 4 часа 48 минут
GuGo1991, может еще что подскажешь?)
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
21.01.2014, 02:03     Прочитать никнейм из файла и после использования - удалить #4
Вот как я себе это представляю, учитывая мой первый ответ:
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
    if(!iConnectionRequested)
    {
        for(int i = 0; i < counter - 1; i++)
        {
            string Nickname = value[i];
            if(!iGettingNewName)
            {
                sampConnect(server, port, Nickname, password, client);// åñëè âûïîëГ*èëîñü ГЅГІГ®, ГІГ® ГіГ¤Г*ëÿåì èñïîëüçîâГ*Г*Г*ГіГѕ ñòðî÷êó, ïîäñòГ*âëÿåì ñëóäóþùóþ.
                for(int j = i; j < counter - 1; j++)
                {
                    if(value[j + 1] == "")      //
                        break;                  //
                    string temp;                //  ГќГ«ГҐГ¬ГҐГ*ГІ ГіГ±ГІГ*Г*Г*âëèâГ*ГҐГ¬ Гў ГЄГ®Г*ГҐГ¶ Г¬Г*Г±Г±ГЁГўГ*
                    temp = value[j];            //  ГЁ óìåГ*ГјГёГ*ГҐГ¬ Г§Г*Г*Г·ГҐГ*ГЁГҐ Г¬Г*Г±Г±ГЁГўГ* Г*Г* 1,
                    value[j] = value[j + 1];    //  ГІГҐГ¬ Г±Г*ìûì "èìèòèðóåì" ГіГ¤Г*ëåГ*ГЁГҐ
                    value[j + 1] = temp;        //
                    counter--;                  //
                }
            }  
            else
            {
                sampConnect(server, port, Nickname, password, client);// åñëè âûïîëГ*èëîñü ГЅГІГ®, ГІГ® ïåðåìåùГ*ГҐГ¬ èñïîëüçîâГ*Г*Г*ГіГѕ ñòðî÷êó Гў ГЄГ®Г*ГҐГ¶, ïîäñòГ*âëÿåì ñëåäóþùóþ.
                for(int j = i; j < counter - 1; j++)
                {
                    if(value[j + 1] == "")      //
                        break;                  //
                    string temp;                //   ÝëåìåГ*ГІ ГіГ±ГІГ*Г*Г*âëèâГ*ГҐГ¬ Гў ГЄГ®Г*ГҐГ¶ Г¬Г*Г±Г±ГЁГўГ*
                    temp = value[j];            //
                    value[j] = value[j + 1];    //
                    value[j + 1] = temp;        //
                }
                iConnectionRequested = 1;
            }
        }
    }
javse95
0 / 0 / 0
Регистрация: 02.08.2013
Сообщений: 35
21.01.2014, 03:15  [ТС]     Прочитать никнейм из файла и после использования - удалить #5
Цитата Сообщение от GuGo1991 Посмотреть сообщение
Вот как я себе это представляю, учитывая мой первый ответ:
а где в этом коде загрузка ников из файла Nicknames.txt?

Добавлено через 19 минут
GuGo1991, вот что выдало при компиляции
XML
1
2
3
4
1>main.cpp(146): error C2664: sampConnect: невозможно преобразовать параметр 3 из "std::string" в "char *"
1>          Для выполнения данного преобразования нет доступного оператора преобразования, определенного пользователем, или вызов оператора невозможен
1>main.cpp(160): error C2664: sampConnect: невозможно преобразовать параметр 3 из "std::string" в "char *"
1>          Для выполнения данного преобразования нет доступного оператора преобразования, определенного пользователем, или вызов оператора невозможен
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
21.01.2014, 04:09     Прочитать никнейм из файла и после использования - удалить #6
Цитата Сообщение от javse95 Посмотреть сообщение
а где в этом коде загрузка ников из файла Nicknames.txt?
Учитывая мой первый ответ, ники уже загружены в массив value[].
Следовательно все манипуляции выполняются в массиве.
После всех операций, если есть необходимость, можно массив с оставшимися никами записать в текстовик...

Добавлено через 3 минуты
Цитата Сообщение от javse95 Посмотреть сообщение
вот что выдало при компиляции
В функции sampConnect, тип аргумента Nickname измените на string.
Не забудьте добавить:
C++
1
#include <string>
Добавлено через 47 минут
В алгоритме во время "удаления", counter декриментируем после блока цикла for:
C++
1
2
3
4
5
6
7
8
9
10
for(int j = i; j < counter - 1; j++)
{
    if(value[j + 1] == "")
        break;                     
    string temp;                 
    temp = value[j];           
    value[j] = value[j + 1];  
    value[j + 1] = temp;     
}
counter--;
javse95
0 / 0 / 0
Регистрация: 02.08.2013
Сообщений: 35
21.01.2014, 15:18  [ТС]     Прочитать никнейм из файла и после использования - удалить #7
GuGo1991, спасибо, получился вот примерно такой код. все скомпилировалось, но при запуске приложения ни одна из функций SampConnect не инициализируется. В функции sampConnect, тип аргумента Nickname изменить на string не получится. Пришлось делать как то так. Что тут не правильно?
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
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
...................................
if(!iConnectionRequested)
    {
    string value[100];
    int counter = 0;
    ifstream f("Nicknames.txt");
        for(int i = 0; i < counter - 1; i++)
        {
            string Nickname = value[i];
            
            char* Nick = &Nickname[0]; 
    
            cout<<Nick<<std::endl;
    
    if(!iGettingNewName)
            {
                sampConnect(settings.server.szAddr, settings.server.iPort, Nick, settings.server.szPassword, pRakClient);// если выполнилось это, то удаляем использованную строчку, подставляем слудующую.
                for(int j = i; j < counter - 1; j++)
                {
                    if(value[j + 1] == "")      //
                        break;                  //
                    string temp;                //  Элемент устанавливаем в конец массива
                    temp = value[j];            //  и уменьшаем значение массива на 1,
                    value[j] = value[j + 1];    //  тем самым "имитируем" удаление
                    value[j + 1] = temp;        //
                                     
                }
                counter--; 
            }  
            else
            {
                 sampConnect(settings.server.szAddr, settings.server.iPort, Nick, settings.server.szPassword, pRakClient);// если выполнилось это, то перемещаем использованную строчку в конец, подставляем следующую.
                for(int j = i; j < counter - 1; j++)
                {
                    if(value[j + 1] == "")      //
                        break;                  //
                    string temp;                //   Элемент устанавливаем в конец массива
                    temp = value[j];            //
                    value[j] = value[j + 1];    //
                    value[j + 1] = temp;        //
                }
                iConnectionRequested = 1;
            }
        }
    }
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
22.01.2014, 00:27     Прочитать никнейм из файла и после использования - удалить #8
Попробуйте так:
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
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
int main()
{
    string value[100];
    int counter = 0;
    ifstream f("Nicknames.txt");
    while(true)
    {
        if(!f.eof())
        {
            f >> value[counter];
            counter++;
        }
        else
            break;
    }
    
    if(!iConnectionRequested)
    {
        for(int i = 0; i < counter - 1; i++)
        {
            string element = value[i];
            char Nickname[20];
            strcpy(Nickname, element.c_str()); // ÏðåîáðГ*çîâГ*Г*ГЁГҐ string Гў char
            
            if(!iGettingNewName)
            {
                sampConnect(server, port, Nickname, password, client);// если выполнилось это, то удаляем использованную строчку, подставляем слудующую.
                for(int j = i; j < counter - 1; j++)
                {
                    if(value[j + 1] == "")      //
                        break;                  //
                    string temp;                //  Элемент устанавливаем в конец массива
                    temp = value[j];            //  и уменьшаем значение массива на 1,
                    value[j] = value[j + 1];    //  тем самым "имитируем" удаление
                    value[j + 1] = temp;        //
                }
                counter--;
            }  
            else
            {
                sampConnect(server, port, Nickname, password, client);// если выполнилось это, то перемещаем использованную строчку в конец, подставляем следующую.
                for(int j = i; j < counter - 1; j++)
                {
                    if(value[j + 1] == "")      //
                        break;                  //
                    string temp;                //   Элемент устанавливаем в конец массива
                    temp = value[j];            //
                    value[j] = value[j + 1];    //
                    value[j + 1] = temp;        //
                }
                iConnectionRequested = 1;
            }
        }
    }
 
    system("pause");
    return 0;
}
Здесь Nickname отправится в функцию sampConnect типом char.

Добавлено через 22 минуты
Цитата Сообщение от javse95 Посмотреть сообщение
Что тут не правильно?
Цитата Сообщение от javse95 Посмотреть сообщение
C++
1
ifstream f("Nicknames.txt");
Вы создаёте input поток ifstream, но сам массив value[] не заполняете содержимым текстовика.

Цитата Сообщение от javse95 Посмотреть сообщение
C++
1
2
string Nickname = value[i];
char* Nick = &Nickname[0];
Эту часть я не очень понял.
javse95
0 / 0 / 0
Регистрация: 02.08.2013
Сообщений: 35
22.01.2014, 00:46  [ТС]     Прочитать никнейм из файла и после использования - удалить #9
GuGo1991, цикл заработал, только почему-то строчка берется через одну.
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
22.01.2014, 01:58     Прочитать никнейм из файла и после использования - удалить #10
Цитата Сообщение от javse95 Посмотреть сообщение
строчка берется через одну.
Скорее всего проблема в условиях.
Цитата Сообщение от GuGo1991 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
if(!iGettingNewName)
{
 ...
}
else
{
 ...
}
Строчка берётся не через одну, а выполняются оба условия последовательно.
Здесь уже вам придётся покалдовать с условиями.
Как вариант могу посоветовать создать переменную типа bool в начале первого цикла for и установить значение к слову на false.
При выполнении первого условия в блоке if после цикла for установить значение bool-ой переменной на true.
Проверить это же значение в условии else (при false продолжить).

Добавлено через 35 минут
Попробуйте ещё этот вариант условий:
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
    if(!iConnectionRequested)
    {
        int loop = 0;
        while(loop < counter - 1)
        {
            int i = 0;
            string element = value[i];
            char Nickname[20];
            strcpy(Nickname, element.c_str()); // ÏðåîáðГ*çîâГ*Г*ГЁГҐ string Гў char
            
            if(!iGettingNewName)
            {
                sampConnect(server, port, Nickname, password, client);// åñëè âûïîëГ*èëîñü ГЅГІГ®, ГІГ® ГіГ¤Г*ëÿåì èñïîëüçîâГ*Г*Г*ГіГѕ ñòðî÷êó, ïîäñòГ*âëÿåì ñëóäóþùóþ.
                for(int j = i; j < counter - 1; j++)
                {
                    if(value[j + 1] == "")      //
                        break;                  //
                    string temp;                //  ГќГ«ГҐГ¬ГҐГ*ГІ ГіГ±ГІГ*Г*Г*âëèâГ*ГҐГ¬ Гў ГЄГ®Г*ГҐГ¶ Г¬Г*Г±Г±ГЁГўГ*
                    temp = value[j];            //  ГЁ óìåГ*ГјГёГ*ГҐГ¬ Г§Г*Г*Г·ГҐГ*ГЁГҐ Г¬Г*Г±Г±ГЁГўГ* Г*Г* 1,
                    value[j] = value[j + 1];    //  ГІГҐГ¬ Г±Г*ìûì "èìèòèðóåì" ГіГ¤Г*ëåГ*ГЁГҐ
                    value[j + 1] = temp;        //
                }
                counter--;
                loop--;
            }  
            else
            {
                sampConnect(server, port, Nickname, password, client);// åñëè âûïîëГ*èëîñü ГЅГІГ®, ГІГ® ïåðåìåùГ*ГҐГ¬ èñïîëüçîâГ*Г*Г*ГіГѕ ñòðî÷êó Гў ГЄГ®Г*ГҐГ¶, ïîäñòГ*âëÿåì ñëåäóþùóþ.
                for(int j = i; j < counter - 1; j++)
                {
                    if(value[j + 1] == "")      //
                        break;                  //
                    string temp;                //   ÝëåìåГ*ГІ ГіГ±ГІГ*Г*Г*âëèâГ*ГҐГ¬ Гў ГЄГ®Г*ГҐГ¶ Г¬Г*Г±Г±ГЁГўГ*
                    temp = value[j];            //
                    value[j] = value[j + 1];    //
                    value[j + 1] = temp;        //
                }
                iConnectionRequested = 1;
            }
            loop++;
        }
    }
javse95
0 / 0 / 0
Регистрация: 02.08.2013
Сообщений: 35
22.01.2014, 02:45  [ТС]     Прочитать никнейм из файла и после использования - удалить #11
GuGo1991, спасибо, помогло). еще одна проблема, программа просто флудит подключениями с новыми никами, а как сделать чтобы пока вот эта переменная равна 1
C++
1
 iConnectionRequested = 1;
следующая команда не отправлялась? если переменная поменяла значение на 0 то отправляется SampLogin со следующим ником. А то получается соединение запрошено и сразу следующее посылается вместо него и так далее.

Добавлено через 6 минут
В предыдущем сообщении не SampLogin а sampConnect. ошибся
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
23.01.2014, 19:26     Прочитать никнейм из файла и после использования - удалить #12
Я как понял вам надо использовать ник для другой операции, не только отправить в функцию sampConnect?
Тогда лучше действие перенести в цикл. То есть, выполнить после условий if и else,
в теле цикла while.
javse95
0 / 0 / 0
Регистрация: 02.08.2013
Сообщений: 35
23.01.2014, 20:58  [ТС]     Прочитать никнейм из файла и после использования - удалить #13
GuGo1991, смысл данного кода который вы мне написали, как я понял в том , что если выполнилось допустим условие
C++
1
if(!iConnectionRequested)
и
C++
1
if(!iGettingNewName
, то идет сразу цикл посыла команд sampConnect, и как я понял уже игнорируется вот это
C++
1
if(!iConnectionRequested)
. а вот как сделать так: допустим выполняется
C++
1
if(!iGettingNewName
подставляется первая строчка с ником, отправляется sampConnect с ним; подставляется в переменную Nickname вторая строчка с ником, но чтобы
она не сразу отправлялась, а только когда опять будет условие
C++
1
 if(!iConnectionRequested)
и соответственно к ней
C++
1
if(!iGettingNewName)
или
C++
1
else
. Т.е. проще сказать мы посылаем команду и подставляем в переменную Nickname следующий ник и пусть программа ждет пока что условие if(!iConnectionRequested) опять выполнится.
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
23.01.2014, 21:22     Прочитать никнейм из файла и после использования - удалить #14
Цитата Сообщение от javse95 Посмотреть сообщение
C++
1
if(!iConnectionRequested)
Условие if выполнится один раз и как вы заметили будет игнорироваться до конца цикла.
Если вам надо проверять значение iConnectionRequested каждый раз,
то придется использовать цикл while, а не условие if:
C++
1
while(!iConnectionRequested)
javse95
0 / 0 / 0
Регистрация: 02.08.2013
Сообщений: 35
23.01.2014, 21:50  [ТС]     Прочитать никнейм из файла и после использования - удалить #15
GuGo1991, сделал вот так, но все осталось также, сразу флудит этими подключениями
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
 string value[100];
    int counter = 0;
    ifstream f("Nicknames.txt");
    while(true)
    {
        if(!f.eof())
        {
            f >> value[counter];
            counter++;
        }
        else
            break;
    }
         while(!iConnectionRequested)
 
    {
        int loop = 0;
        while(loop < counter - 1)
        {
            int i = 0;
            string element = value[i];
            char Nickname[20];
            strcpy(Nickname, element.c_str()); // Преобразование string в char
            
            if(!iGettingNewName)
            {
                
sampConnect(settings.server.szAddr, settings.server.iPort, Nickname, settings.server.szPassword, pRakClient);
Log( Nickname );
                for(int j = i; j < counter - 1; j++)
                {
                    if(value[j + 1] == "")      //
                        break;                  //
                    string temp;                //  Элемент устанавливаем в конец массива
                    temp = value[j];            //  и уменьшаем значение массива на 1,
                    value[j] = value[j + 1];    //  тем самым "имитируем" удаление
                    value[j + 1] = temp;        //
                }
                counter--;
                loop--;
            }  
            else
            {
                
sampConnect(settings.server.szAddr, settings.server.iPort, Nickname, settings.server.szPassword, pRakClient);
Log(Nickname);
                for(int j = i; j < counter - 1; j++)
                {
                    if(value[j + 1] == "")      //
                        break;                  //
                    string temp;                //   Элемент устанавливаем в конец массива
                    temp = value[j];            //
                    value[j] = value[j + 1];    //
                    value[j + 1] = temp;        //
                }
                iConnectionRequested = 1;
            }
            loop++;
        }
    }
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
23.01.2014, 21:58     Прочитать никнейм из файла и после использования - удалить #16
C++
1
while(loop < counter - 1)
измените на
C++
1
if(loop < counter - 1)
Не знаю как у вас в основной программе, но если всё это находится в цикле,
т. е. значение iConnectionRequested и так меняется циклически,
то тогда можете оставить if(!iConnectionRequested).
И обратите внимание на 56 строчку, почему там значение iConnectionRequested приравнивается к 1.
javse95
0 / 0 / 0
Регистрация: 02.08.2013
Сообщений: 35
23.01.2014, 22:12  [ТС]     Прочитать никнейм из файла и после использования - удалить #17
GuGo1991, ну т.е. мы запрашиваем подключение через sampConnect и приравниваем iConnectionRequested к 1, т.е. мы показываем то что соединение запрошено и следующий sampConnect до изменения iConnectionRequested на 0 посылаться не должен. а iConnectionRequested изменится в дальнейшем на 0 при условии дисконнекта с сервера.

Добавлено через 3 минуты
GuGo1991, Вот при таком коде все работает так как надо. Только в нем Nickname постоянно один используется при sampConnect а надо чтобы подставлялись из текстовика по очереди и все
C#
1
2
3
4
5
6
7
8
9
10
char *Nickname="Nick_Name";
if(!iConnectionRequested)
        {
            if(!iGettingNewName)
                sampConnect(settings.server.szAddr, settings.server.iPort, Nickname, settings.server.szPassword, pRakClient);
            else
                sampConnect(settings.server.szAddr, settings.server.iPort, Nickname, settings.server.szPassword, pRakClient);
 
            iConnectionRequested = 1;
        }
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
23.01.2014, 22:20     Прочитать никнейм из файла и после использования - удалить #18
Ну тогда установите сначала iConnectionRequested = 1; после loop++;
и замените while(loop < counter - 1) и while(!iConnectionRequested)
на if(loop < counter - 1) и if(!iConnectionRequested) соответственно.
Посмотрим, что произойдёт.
javse95
0 / 0 / 0
Регистрация: 02.08.2013
Сообщений: 35
23.01.2014, 22:38  [ТС]     Прочитать никнейм из файла и после использования - удалить #19
GuGo1991, вот, теперь флуда подключениями нет, но при последующей посылке sampConnect ник подставляется тот же, т.е. берется 1 строчка постоянно.

Добавлено через 6 минут
GuGo1991, вот сам код
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
string value[100];
    int counter = 0;
    ifstream f("Nicknames.txt");
    while(true)
    {
        if(!f.eof())
        {
            f >> value[counter];
            counter++;
        }
        else
            break;
    }
         if(!iConnectionRequested)
 
    {
        int loop = 0;
        if(loop < counter - 1)
        {
            int i = 0;
            string element = value[i];
            char Nickname[20];
            strcpy(Nickname, element.c_str()); // Преобразование string в char
            
            if(!iGettingNewName)
            {
                
sampConnect(settings.server.szAddr, settings.server.iPort, Nickname, settings.server.szPassword, pRakClient);
Log( Nickname );
                for(int j = i; j < counter - 1; j++)
                {
                    if(value[j + 1] == "")      //
                        break;                  //
                    string temp;                //  Элемент устанавливаем в конец массива
                    temp = value[j];            //  и уменьшаем значение массива на 1,
                    value[j] = value[j + 1];    //  тем самым "имитируем" удаление
                    value[j + 1] = temp;        //
                }
                counter--;
                loop--;
            }  
            else
            {
                
               sampConnect(settings.server.szAddr, settings.server.iPort, Nickname, settings.server.szPassword, pRakClient);
               Log(Nickname);
                for(int j = i; j < counter - 1; j++)
                {
                    if(value[j + 1] == "")      //
                        break;                  //
                    string temp;                //   Элемент устанавливаем в конец массива
                    temp = value[j];            //
                    value[j] = value[j + 1];    //
                    value[j + 1] = temp;        //
                }
                
            }
            loop++;
            iConnectionRequested = 1;  
        }
    }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2014, 22:49     Прочитать никнейм из файла и после использования - удалить
Еще ссылки по теме:

Прочитать весь string после знака || C++
Удалить числа из файла, без использования дополнительных массивов и файлов C++
C++ Прочитать из файла

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

Или воспользуйтесь поиском по форуму:
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
23.01.2014, 22:49     Прочитать никнейм из файла и после использования - удалить #20
Понятно. Тогда дело за малым. Остаётся перезаписать текстовой файл.
Думаю после блока if(!iConnectionRequested) будет в самый раз.
C++
1
2
3
4
5
ofstream of("Nicknames.txt");
    for(int j = 0; j < counter - 1; j++)
    {
        of << value[j] << endl;
    }
На всякий случай, сделайте резервную копию текстовика.
Yandex
Объявления
23.01.2014, 22:49     Прочитать никнейм из файла и после использования - удалить
Ответ Создать тему
Опции темы

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