Форум программистов, компьютерный форум 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++ Из текстового файла прочитать четные числа и записать их в другой файл без использования массива (код С++)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
javse95
0 / 0 / 0
Регистрация: 02.08.2013
Сообщений: 35
23.01.2014, 22:56  [ТС]     Прочитать никнейм из файла и после использования - удалить #21
GuGo1991, main.cpp(160): error C2065: of: необъявленный идентификатор
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
23.01.2014, 22:58     Прочитать никнейм из файла и после использования - удалить #22
C++
1
ofstream of("Nicknames.txt");
Точно написали?
javse95
0 / 0 / 0
Регистрация: 02.08.2013
Сообщений: 35
23.01.2014, 23:03  [ТС]     Прочитать никнейм из файла и после использования - удалить #23
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
string value[100];
    int counter = 0;
    ifstream f("Nicknames.txt");
    while(true)
    {
        if(!f.eof())
        {
            f >> value[counter];
            counter++;
        }
        else
            break;
    }
         if(!iConnectionRequested)
             ofstream of("Nicknames.txt");
    for(int j = 0; j < counter - 1; j++)
    {
        of << value[j] << endl;
    }
 
    {
        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;  
        }
    }
Добавлено через 36 секунд
GuGo1991, вроде написал
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
23.01.2014, 23:12     Прочитать никнейм из файла и после использования - удалить #24
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
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;  
    }
}
 
ofstream of("Nicknames.txt");
for(int j = 0; j < counter - 1; j++)
{
    of << value[j] << endl;
}
Должно работать
javse95
0 / 0 / 0
Регистрация: 02.08.2013
Сообщений: 35
23.01.2014, 23:17  [ТС]     Прочитать никнейм из файла и после использования - удалить #25
GuGo1991, ВСЕ!!! ЗАРАБОТАЛО!111!!! СПАСИБО ВАМ! КАК Я МОГУ ВАС ОТБЛАГОДАРИТЬ?
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
23.01.2014, 23:24     Прочитать никнейм из файла и после использования - удалить #26
javse95, не за что. Главное что заработало )
javse95
0 / 0 / 0
Регистрация: 02.08.2013
Сообщений: 35
24.01.2014, 00:10  [ТС]     Прочитать никнейм из файла и после использования - удалить #27
GuGo1991, ах вот, есть еще один моментик. Расскажу смысл в общих чертах.
Изначально в программе полюбому будет посылаться сначало
C++
1
2
3
if(!iGettingNewName)
        {
            sampConnect(settings.server.szAddr, settings.server.iPort, Nickname, settings.server.szPassword, pRakClient);
так как else может сработать в том случае, если iGettingNewName присвоится 1. Так что получается допустим у меня в текстовом файле находятся строчки
C++
1
2
3
4
Nickname1
Nickname2
Nickname3
Nickname4
Берется первая подставляется и отправляется sampConnect, далее , если на сервере есть игрок с именем Nickname1, то сервер присылает ответ REJECT_REASON_BAD_NICKNAME. и соответсвенно iGettingNewName присваивается 1, и выполняется условие else. И выходит то что Nickname1 удаляется из текстовика и используется Nickname2, который допустим не занят на сервере. И получается то что программа перемещает Nickname2 в конец текстового документа. Вообщем делает наоборот, ник который должен перемещаться в конец документа удаляет, а который должен быть удален, перемещает в конец. Как я понял вот в этой процедуре
C++
1
2
3
4
5
6
else if(byteRejectReason==REJECT_REASON_BAD_NICKNAME)
    {
        iGettingNewName = true;
        Log( "Неправильный ник. Смена ника  ");
        resetPools(1, 0);
    }
надо дописать, чтобы используемый на данный момент Nickname перемещался в конец документа.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2014, 03:49     Прочитать никнейм из файла и после использования - удалить
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
24.01.2014, 03:49     Прочитать никнейм из файла и после использования - удалить #28
Получается надо ещё раз проверить значение iGettingNewName
после работы функции sampConnect в первый раз
C++
1
2
3
4
5
6
7
8
9
10
11
if(!iGettingNewName)
{
    sampConnect(settings.server.szAddr, settings.server.iPort, Nickname, settings.server.szPassword, pRakClient);
    if(iGettingNewName)   // В этом случае
        break;            // выполнится else
    ...................
}
else
{
    ...................
}
Добавлено через 24 минуты
Хотя не знаю как отреагирет цикл. Посмотрим после компиляции

Добавлено через 6 минут
Думаю этот вариант сработает корректней всего (вместо else вставьте условие if(iGettingNewName)):
C++
1
2
3
4
5
6
7
8
9
10
11
12
if(!iGettingNewName)
{
    sampConnect(settings.server.szAddr, settings.server.iPort, Nickname, settings.server.szPassword, pRakClient);
    if(!iGettingNewName)
    {
        ...................
    }
}
if(iGettingNewName)
{
    ...................
}
Yandex
Объявления
24.01.2014, 03:49     Прочитать никнейм из файла и после использования - удалить
Ответ Создать тему
Опции темы

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