ifstream 没有 return 正确的 int 值

ifstream does not return the correct int value

我想创建一个工厂 class,它可以从文件中创建和加载对象; 然而,当我尝试从文件中读取 int 时,它似乎 return 是一个不正确的数字。

std::ifstream input;
input.open("input.txt");
if (!input.is_open()){
    exit(-1);

}

int number;

input >> number;
cout << number;

input.close();

当我在 input.txt 文件中输入数字时,它显示:-858993460。 更改数字没有什么区别,当我使用 cin 而不是 ifstream 时,它会正常工作。我可能只是遗漏了一些非常愚蠢的东西,但我想不通。

编辑:使用 getLine() 可以正常工作。我想使用 >>.

有问题

这是另一种打开文件并逐行阅读的解决方案:

string line;
ifstream myfile("input.txt");
if (myfile.is_open())
{
  while ( getline (myfile,line) )
  {
    cout << line << '\n'; // Use this to verify that the number is outputed
    // Here you can transform your line into an int:
    // number = std::stoi(line);
  }
  // myfile.close(); Use this if you want to handle the errors
}

else cout << "Unable to open file";

如果您不想逐行阅读,只需删除 while

...
getline(myfile,line);
number = std::stoi(line);
...

一行读取多个数字

图片你的输入文件是这样的:

1, 2.3, 123, 11

1, 2

0.9, 90

然后,您可以使用这段代码读取所有数字:

string line;
ifstream myfile("input.txt");
string delimiter = ", ";

if (myfile.is_open())
{
  while ( getline (myfile,line) )
  {
    cout << "Reading a new line: " << endl;
    size_t pos = 0;
    string token;
    while ((pos = line.find(delimiter)) != string::npos) {
      token = line.substr(0, pos);
      cout << token << endl; // Instead of cout, you can transform it into an int
      line.erase(0, pos + delimiter.length());
    }
  }
}
else cout << "Unable to open file";

输出将是:

Reading a new line: 
1
2.3
123
11
Reading a new line:
1
2
Reading a new line:
0.9
90

可能有效的新解决方案=)

我没有测试这个,但它显然有效:

std::ifstream input;
double val1, val2, val3;
input.open ("input.txt", std::ifstream::in);
if (input >> val1 >> val2 >> val3) {
  cout << val1 << ", " << val2 << ", " << val3 << endl;
}
else
{
  std::cerr << "Failed to read values from the file!\n";
  throw std::runtime_error("Invalid input file");
}

要检查 IO,请参阅 http://kayari.org/cxx/yunocheckio.html