Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Переменная в идентификаторе переменной.


Автор: .talisman 21.5.2005, 15:31
Значит так. Существует 20 символьных массивов с именами a1, a2, a3, a4... Существует переменная quan, которая содержит значение от 1 до 20, о есть число, которое показывает сколько массивов будет использованно. Она задаётся пользователем в ходе выполнения программы.
Суть в следующем. Нужно прочитать с клавиатуры имена участников, причем заранее не известно сколько их всего. Делать двадцать условий не рационально, а вот как сделать это в цикле я немного не понимаю. Нужно чтобы в операторе ввода scanf запись производилось в переменную имя которой меняется динамически. по типу "a<i+1>", где i является инкрементом цикла и преобразовывалась заранее, чтобы при выполнении записи вместо "a<i+1>" было написанно, например, "а5".

Кусок кода:
Код
for(i=0; i<quan; i++)
{
    printf("Enter name of member number %i: ", i+1);
    scanf("%s", ?вопрос? );
}


если это не возможно, то подскажите как это реализовать. может быть через многомерный массив? или через структуры?
заранее спасибо.

Автор: sergejzr 21.5.2005, 15:51
через лист делай smile
Код не компилировал и не проверял smile
Код

#include <iostream.h>
#include <stdlib.h>
#include <string.h>

struct player
{
    char* name;
    player*next;
};

player* newPlayer(char*name)
{
    player *newP=new player;
    newP->next=NULL;
    newP->name=new char(strlen(name));
    memcpy(newP->name,name,strlen(name)+1);
    return newP;
}
void main()
{
    char *input=new char[256];//Переменная для чтения имён.

    cout<<"first player"<<endl;
    cin>>input;
    player *first=newPlayer(input); //закладываем первого игрока с зачитанным именем
    player *tmp=first; //темп игроу у нас первй.

    while(true)
    {
        cout<<"next player"<<endl;
        cin>>input;
        if(strcmp(input,"end")==0) //если юзер написал end, заканчиваем игру. Все игроки есть :)
            break;
        tmp->next=newPlayer(input);//а если задал имя, то закладываем новую структуру с этим именем как следующего игрока 
        tmp=tmp->next; //пересаживаем темпа на него
    }

    tmp=first;
    //распечатываем лист пока следующий не станет NULL
    while(tmp!=NULL)
    {
        cout<<tmp->name<<endl;
        tmp=tmp->next;
    }
}

Автор: .talisman 21.5.2005, 16:13
sergej.z
что-то слишком сложно для меня =)
со списками только недавно начал работать, но всё равно пока трудновато.
про сиин и сиаун наслышан, но ни разу не использовал.
по проще никак? =)
или хотя бы каментов... smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)