2017-10-21 52 views
-1

我使用stringstream來解析配置文件。 C++整型變量在分配文本文件中的值時工作正常。但是,當我將配置文件中的讀取值分配給C++ int16_t變量時,它只是分配一個不同的值。我不知道發生了什麼事。將配置文件中的變量賦給C++中的int16_t變量

這是我的代碼:

void parseConfigurationFile(){ 
    //Variables 
    int16_t int16_tValue; 
    int firstIntegerValue; 

    //File parsing code 
    std::ifstream fin(configFileName); 
    std::string line; 
    std::istringstream sin; 

    while (std::getline(fin, line)) 
    { 
    sin.str(line.substr(line.find(":")+1)); 
    if (line.find("firstIntegerValue") != std::string::npos) { 
     sin >> firstIntegerValue; 
    } 
    else if (line.find("int16_tValue") != std::string::npos) { 
     sin>>int16_tValue; 
    } 
} 

我的配置文件看起來像如下:

firstIntegerValue : 12 
int16_tValue : 55555 

可能是什麼可能去錯在這裏?我無法弄清楚這一點。

+0

我建議在製作一個istringstream實例之前使用'find'來找到':'。 –

+0

你的'if-else'階梯缺少最後的'else'子句。 –

+0

調試器。使用調試器。調試器將允許您單步執行代碼,*在變量中觀察*值。調試程序通常比正確發佈到StackOverflow並等待某人檢查您的代碼或調試您的代碼更快。請使用調試會話的結果編輯您的文章(指出哪個語句導致問題,預期行爲和實際行爲)。 –

回答

1

您的輸入55555超出了int16_t的範圍。由於int16_t是一個帶符號的數量,因此爲符號保留一位,所以您的正範圍較小。你溢出了一個有符號的16位整數。

您的值可能會被解釋爲負數。

您可能想輸入一個較小的值或使用uint16_t