ifstream 不从文件中读取值
ifstream doesn't read values from the file
我正在制作一个处理点和文件的程序。我没有收到任何警告或错误,但它仍然无法正常工作。
我认为问题出在 ifstream 上,导致 ofstream 运行良好并将输入的值放入文件中。
我得到的输出看起来像这样
Please enter seven (x,y) pairs:
//here the seven pairs are entered
These are your points:
//(...,...)x7 with the values
These are the points read from the file:
//and the program ends and returns 0
希望有人能帮助我。
这是我的代码。
#include <iostream>
#include "std_lib_facilities.h"
using namespace std;
struct Point{
float x;
float y;
};
istream& operator>>(istream& is, Point& p)
{
return is >> p.x >> p.y;
}
ostream& operator<<(ostream& os, Point& p)
{
return os << '(' << p.x << ',' << p.y << ')';
}
void f() {
vector<Point> original_points;
cout << "Please enter seven (x,y) pairs: " << endl;
for (Point p; original_points.size() < 7;) {
cin >> p;
original_points.push_back(p);
}
cout << endl;
cout << "These are your points: " << endl;
for (int i=0; i < 7; i++) {
cout << original_points[i] << endl;
}
string name = "mydata.txt";
ofstream ost {name};
if (!ost) error("can't open output file", name);
for (Point p : original_points) {
ost << '(' << p.x << ',' << p.y << ')' << endl;
}
ost.close();
ifstream ist{name};
if (!ist) error("can't open input file", name);
vector<Point> processed_points;
for (Point p; ist >> p;) {
processed_points.push_back(p);
}
cout << endl;
cout << "These are the points read from the file: " << endl;
for (int i=1; i <= processed_points.size(); i++) {
cout << processed_points[i] << endl;
}
}
int main()
{
f();
return 0;
}
你输出了方括号和一个逗号,但你没有使用它们,所以你的第一次读取操作将失败。尝试:
istream& operator>>(istream& is, Point& p)
{
char open;
char close;
char comma;
is >> open >> p.x >> comma >> p.y >> close;
if (open != '(' || close != ')' || comma != ',')
{
is.setstate(std::ios_base::failbit);
}
return is;
}
你的程序也会因为超出向量的边界而在最后崩溃,你正在使用从 1
到 length
的索引,向量是 0 索引的,所以应该被访问从 0
到 length-1
:
for (int i = 0; i < processed_points.size(); i++) {
cout << processed_points[i] << endl;
}
或者只使用基于范围的循环:
for (auto& point : processed_points) {
cout << point << endl;
}
我正在制作一个处理点和文件的程序。我没有收到任何警告或错误,但它仍然无法正常工作。 我认为问题出在 ifstream 上,导致 ofstream 运行良好并将输入的值放入文件中。
我得到的输出看起来像这样
Please enter seven (x,y) pairs:
//here the seven pairs are entered
These are your points:
//(...,...)x7 with the values
These are the points read from the file:
//and the program ends and returns 0
希望有人能帮助我。 这是我的代码。
#include <iostream>
#include "std_lib_facilities.h"
using namespace std;
struct Point{
float x;
float y;
};
istream& operator>>(istream& is, Point& p)
{
return is >> p.x >> p.y;
}
ostream& operator<<(ostream& os, Point& p)
{
return os << '(' << p.x << ',' << p.y << ')';
}
void f() {
vector<Point> original_points;
cout << "Please enter seven (x,y) pairs: " << endl;
for (Point p; original_points.size() < 7;) {
cin >> p;
original_points.push_back(p);
}
cout << endl;
cout << "These are your points: " << endl;
for (int i=0; i < 7; i++) {
cout << original_points[i] << endl;
}
string name = "mydata.txt";
ofstream ost {name};
if (!ost) error("can't open output file", name);
for (Point p : original_points) {
ost << '(' << p.x << ',' << p.y << ')' << endl;
}
ost.close();
ifstream ist{name};
if (!ist) error("can't open input file", name);
vector<Point> processed_points;
for (Point p; ist >> p;) {
processed_points.push_back(p);
}
cout << endl;
cout << "These are the points read from the file: " << endl;
for (int i=1; i <= processed_points.size(); i++) {
cout << processed_points[i] << endl;
}
}
int main()
{
f();
return 0;
}
你输出了方括号和一个逗号,但你没有使用它们,所以你的第一次读取操作将失败。尝试:
istream& operator>>(istream& is, Point& p)
{
char open;
char close;
char comma;
is >> open >> p.x >> comma >> p.y >> close;
if (open != '(' || close != ')' || comma != ',')
{
is.setstate(std::ios_base::failbit);
}
return is;
}
你的程序也会因为超出向量的边界而在最后崩溃,你正在使用从 1
到 length
的索引,向量是 0 索引的,所以应该被访问从 0
到 length-1
:
for (int i = 0; i < processed_points.size(); i++) {
cout << processed_points[i] << endl;
}
或者只使用基于范围的循环:
for (auto& point : processed_points) {
cout << point << endl;
}