Azaykon Skrevet 11. november 2004 Del Skrevet 11. november 2004 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
GeirGrusom Skrevet 11. november 2004 Del Skrevet 11. november 2004 (endret) Du gjør det veldig tungvint... enkleste er å bruke ssprintf Endret 11. november 2004 av GeirGrusom Lenke til kommentar
Azaykon Skrevet 11. november 2004 Forfatter Del Skrevet 11. november 2004 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
GeirGrusom Skrevet 11. november 2004 Del Skrevet 11. november 2004 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
Azaykon Skrevet 11. november 2004 Forfatter Del Skrevet 11. november 2004 Takker for hjelpen! Tror jeg skal få det til nå Lenke til kommentar
☀ ❄ Skrevet 12. november 2004 Del Skrevet 12. november 2004 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
kjetil7 Skrevet 12. november 2004 Del Skrevet 12. november 2004 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå