2016-03-05 94 views
-1

我試圖爲不同的級別打開不同的文件,並且需要一個變量名才能這樣做。我嘗試以下,但給了錯誤: 「從字符串不適合轉換爲const char」讀取帶有變量名稱的文件C++

void loadMap(){ 
    //string levelname; 
    //levelname = '../Levels/Level' + level; 
    FILE *file; 
    file = fopen("../Levels/Level" + level + ".txt", "r"); //THIS LINE IS GIVING THE ERROR 
    char section[80]; 
    int index = 0; 
    int x = 0; 
    int y = 0; 

    while(true){ 
     fscanf(file, "%s", section); 
     if(strcmp(section, "[Victor]") == 0){ 
      while(true){ 
       fscanf(file, "%d%d%d", &index, &x, &y); 
       if(index == -1){ 
        break; 
       } 
       victor.x = x; 
       victor.y = y; 
      } 
     } 

... ... //更多代碼

回答

2

「../Levels/Level」 + level +「.txt」被評估爲字符串對象,但fopen()將const char *作爲第一個參數。你可以將其固定方式如下:

所有的
fopen(("../Levels/Level" + level + ".txt").c_str(), "r"); 
3

首先,你應該使用std::ifstream,這是C++的方式(TM)。 其次,字符串的串聯應當使用std::stringstream從標題sstream來完成,下面是如何可以實現一個例子:

#include <iostream> 
#include <sstream> 
#include <fstream> 

int main() { 
    std::string level = "test"; 
    std::stringstream ss; 
    ss<<"../Levels/Level"<<level<<".txt"; 

    std::ifstream file(ss.str()); 
    if(!file.is_open()) { 
     // error 
    } else { 
     // continue 
    } 
} 
0
FILE *file; 
char buf[50]; 
snprintf(buf, sizeof(buf),"%s%d.txt","../Levels/Level",level); 
file = fopen(buf, "r"); 
+0

儘管此代碼可以回答這個問題,提供有關附加的上下文*爲什麼*和/或*該代碼如何回答這個問題可以提高其長期價值。 –

相關問題