Gå til innhold

Problemer med å legge sammen strenger


Anbefalte innlegg

Hei!

 

Jeg har et problem med å åpne filer. Jeg ønsker å legge sammen en int (som er castet om til char) og en streng. Det ser ut til at problemet er å legge disse sammen korrekt, for deretter å bruke de som et filnavn. Jeg har laget et et lite program for å se om jeg kan laste inn fila. Filene er navnet slik: "level_001.txt", "level_002.txt" osv.

 

Koden under er en testkode for å se om jeg kan laste fila uten noen problemer.

 

int main()
  {
  int levelId = 2;    //Denne int'en bestemmer hvilken fil som skal lastes inn.
            //I dette programmmet ønsker jeg å laste fila 
            //"level_002.txt". Hvis levelId var 23, skulle fila
                           // "level_023" ha blitt lastet osv.	

  char* fileName[14];  //Denne variabelen skal inneholde filnavnet

  if(levelId < 10) 
     {
     strcpy(fileName, "level_00");	
     }
  else if(levelId >= 10 && levelId < 100)
     {
     strcpy(fileName, "level_0");
     }
  else
     {
     strcpy(fileName, "level_");
     }

???char* levelIdentification = reinterpret_cast<char*>(levelId); //Cast integer 
                                                                                            // til char  
???strcat(fileName, levelIdentification); //Legg sammen "level_00" med "2"  
  strcat(fileName, ".txt");          //Legg  sammen "level_002" med ".txt"	
  ifstream inFile(fileName);

  ...last data

  inFile.close();

  ...skriv data to skjerm

  return 0;
  }

 

Problemene tror jeg er de linjene jeg har markert med '???'. Hva kan jeg gjøre for å fikse dette?

Lenke til kommentar
Videoannonse
Annonse

Hvis jeg erstatter strcat(fileName, levelIdentification) med

strcat(fileName, "2") så fungerer programmet og fila som jeg ønsker å laste blir lastet inn på riktig måte. Tror at problemet er at det andre argumentet i strcat skal være en const og at levelIdentification ikke er det. Kan det være noe i det??

 

Jeg vet ikke hvordan ssprintf fungerer. Kunne du gitt meg et eksempel?

Lenke til kommentar

Jeg skrev en s for mye i sprintf...

eksempel (med riktig formatering):

char *out = (char*)malloc(256);
long dw;
dw = 4;
sprintf(out, "level_%03d", dw);
printf(out);
system("pause");
free(out);
return 0;

 

'%' betyr varaibel, '0' er et flag som markerer at den skal bytte ut " " med 0, 3 betyr at lengden på stringen som skal legges in er 3, d betyr at det er decimal (ikke float eller double, men heltall)

Lenke til kommentar

Siden du skriver C++ ser jeg ingen grunn til ikke å bruke std::string og std::stringstream:

 

#include <string>

int main()
{
    int levelId = 2;    //Denne int'en bestemmer hvilken fil som skal lastes inn.
    //I dette programmmet ønsker jeg å laste fila 
    //"level_002.txt". Hvis levelId var 23, skulle fila
    // "level_023" ha blitt lastet osv. 

    std::string fileName;

    if(levelId < 10) 
    {
         fileName = "level_00";
    }
    else if(levelId >= 10 && levelId < 100)
    {
         fileName = "level_0";
    }
    else
    {
         fileName = "level_";
    }

    std::stringstream ss; // Lager en stringstrøm
    ss << levelId;          // Legger int-en inn i strømmen
    fileName += ss.str(); // Lager en string av strømmen og legger det til på slutten av fileName

    ifstream inFile(fileName.c_str());

    // Resten er uendret

    // ...last data

    inFile.close();

    // ...skriv data to skjerm

return 0;
}

Lenke til kommentar

Eller noe sånt:

 

#include <sstream>
#include <iomanip>
#include <fstream>

int main()
{
   int level_id = 2;
   std::stringstream fname;

   fname << "level_" << std::setw(3) << std::setfill('0') << level_id << ".txt";

   std::ifstream infile(fname.str().c_str() );

   // last data...

   infile.close();
}

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...