2 votes

Utilisation de getline pour lire un fichier dans une chaîne de caractères, puis repousser cette chaîne sur un vecteur.

Bon, je suis encore assez novice en matière de codage en général, donc il se peut que je rate quelque chose qui est évident pour tout le monde. Ceci étant dit, j'essaie d'imprimer une simple carte à partir d'un fichier texte, mais je veux d'abord charger les informations dans un vecteur. Le problème est que je ne semble charger que la dernière ligne. J'utilise curses pour l'impression et tout ça.

Voici le code de LevelControl. Pour l'instant, je n'ai que la fonction de chargement et la fonction :

void LevelControl::loadLevel(string levelName)
{
    ifstream level;
    string transferLine;
    level.open(levelName);
    if(level.fail()){perror("Level");}
    while(getline(level, transferLine));
    {
        int counter = 0;
        loadedLevel.push_back(transferLine);
        printw("\n");
        counter++;
        transferLine.clear();
    }
}

void LevelControl::printLevel()
{
    int mapSizeX = loadedLevel.size();
    string loadedString;
    for(int i = 0; i < mapSizeX; i++ )
    {
        loadedString = loadedLevel[i];
        mapSizeY = loadedString.size();
        printw("%s \n", loadedString.c_str());
        refresh();
        loadedString.clear();
    }
}

Voici mon main()

int main()
{
    LevelControl currentLevel;
    initscr();
    currentLevel.loadLevel("level.txt");
    bool loopGame = true;
    while(loopGame)
    {
        currentLevel.printLevel();
        getch();
    }
    endwin();
    return 0;
}

Voici la carte que j'essaie d'imprimer et c'est exactement comme elle est écrite dans le fichier txt :

#########*
#........#
#........#
#........#
#........#
#........#
#........#
#........#
#........#
##########

Au lieu de cela, tout ce que j'obtiens est :

##########

Donc oui... aucune idée de la raison pour laquelle il ne lit que la dernière ligne. J'ai vu de nombreux exemples de getline utilisé dans une boucle while pour imprimer un fichier entier. Je ne sais pas pourquoi je ne peux pas tout repousser dans un vecteur. Ma fonction print vérifie la taille du vecteur et j'obtiens toujours 1. Je suis donc presque sûr que ma fonction print fonctionne (ou du moins qu'elle ne cause pas ce problème).

Quoi qu'il en soit, toute aide est la bienvenue !

2voto

Biruk Abebe Points 2116

while(getline(level, transferLine).good());

Cette boucle a une déclaration contrôlée vide. Ainsi, la boucle lit les lignes mais ne fait rien avec elles, jusqu'à la fin de la boucle où seule la dernière ligne lue sera mise dans le vecteur.

while(getline(level, transferLine))//; remove this semi-colon
{
        int counter = 0;//might want to consider the purpose of this also
        loadedLevel.push_back(transferLine);
        printw("\n");
        counter++;
        transferLine.clear();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X