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
我想创建一个工厂 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