为什么C++从txt文件中读取错误值?

use*_*147 6 c++ numbers

我已经创建了一个从txt文件"database.txt"读取值的程序,但是当数字是三位数时输出错误

ifstream myfile("database.txt");
int broj_rijeci = 0;
if (myfile.is_open())
{
    while (getline(myfile, line))
    {
        if (line.at(0) == '[')
        {
            int i = line.length() - 2;
            int brojac = 0;
            system("pause");
            while (line.at(i) != line.at(0))
            {
                input = line.at(i);
                ascii_convert(input);
                broj_rijeci = broj_rijeci + input * pow(10, brojac);
                i--;
                brojac++;
            }
        }
    }
    myfile.close();
}
else cout << "Unable to open file";
Run Code Online (Sandbox Code Playgroud)

我的数据库看起来像这样:

[311]
Run Code Online (Sandbox Code Playgroud)

输出为"310"

Cap*_*ous 3

由于您没有提供实现,ascii_convert因此很难判断问题是在那里还是在其他地方。但是,您可以通过使用 来极大地简化该过程并消除对自己的转换例程的需要std::stringstream

#include <sstream>

std::ifstream myfile("database.txt");
if (myfile.is_open())
{
    std::string line;
    while (std::getline(myfile, line))
    {
        if (line.size() > 1 && line[0] == '[' && line[line.size() - 1] == ']')
        {
            int value;
            if(std::istringstream(line.substr(1, line.size() - 2)) >> value)
            {
                // Conversion was a success ... do something with "value"
            }
            else
            {
                // Conversion failed. Handle error condition.
            }
        }
    }
    myfile.close();
}
else std::cout << "Unable to open file";
Run Code Online (Sandbox Code Playgroud)