ifstream 跳过数字,只写 0
ifstream skips numbers and just writes 0
我正在尝试从文本文件中读取数字并将其分配给 double,这样我就可以用它来计算它的成本。
我尝试使用:
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
struct info
{
string pavadinimas;
double benzinas, dujos, sumad, sumab,km, dujk,benzk, suma;
};
void skaityk (int &n, info S[], double dujk, double benzk, double km)
{
ifstream fd ("Duomenys.txt");
fd>>dujk >>benzk>> km;
fd>> n;
for (int i=1; i<=n; i++)
{
fd.ignore(80, '\n');
char simb [15];
fd.get (simb, 15);
S[i].pavadinimas=simb;
fd>>S[i].benzinas>>S[i].dujos;
}
fd.close();
}
文本文件内容为:
8.4 10.1 500 3
Orlen 4.56 2.32
Neste 4.66 2.43
Saurida 4.65 2.44
我想取前 3 个数字并数数,但无论我做什么,它们都变成 0 并且没有 fd>>dujk >>benzk>> km;
它搞砸了,所以我真的很困惑该怎么做
我被要求提供完整的代码,所以这里是:
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
struct info
{
string pavadinimas;
double benzinas, dujos, sumad, sumab,km, dujk,benzk, suma;
};
void skaityk (int &n, info S[], double &dujk, double &benzk, double &km)
{
ifstream fd ("Duomenys.txt");
fd>>dujk >>benzk>> km;
fd>> n;
for (int i=1; i<=n; i++)
{
fd.ignore(80, '\n');
char simb [15];
fd.get (simb, 15);
S[i].pavadinimas=simb;
fd>>S[i].benzinas>>S[i].dujos;
}
fd.close();
}
void rasyk (int n , info S[], double suma)
{
ofstream fr ("Rezultatai.txt");
fr<<fixed<<setprecision(2)<<suma<<endl;
for (int i=1; i<=n; i++)
fr<<S[i].pavadinimas<<fixed<<setw(8)<<setprecision(2)<<S[i].sumad;
};
double sumuokd (int n,info S[])
{
double s=0;
for (int i=1; i<=n; i++)
{
S[i].sumad=S[i].dujk*S[i].km*S[i].dujos;
}
};
int main()
{
int n;
info S[101];
double dujk, benzk, km;
skaityk(n,S, dujk, benzk, km);
for (int i=1; i<=n; i++)
cout<<S[i].pavadinimas<<fixed<<setw(8)<<setprecision(2)<<S[i].benzinas<<fixed<<setw(8)<<setprecision(2)<<S[i].dujos<<endl<<S[i].sumad<<endl;
return 0;
}
with the line
Without the line
首先,C++ 中的表以 0 开头,因此您所有的 for 循环都应更改为:
for (int i=1; i<=n; i++)
进入:
for (int i=0; i<n; i++)
然后如果你想从函数中获取 dujk, benzk, km
值,你需要在你想从函数传递的每个值之前使用引用 (&):
void skaityk (int &n, info S[], double & dujk, double & benzk, double & km)
修改后的代码会输出
Orlen 4.56 2.32
Neste 4.66 2.43
Saurida 4.65 2.44
最后但同样重要的是,最好使用 std::vector 而不是普通数组。
我正在尝试从文本文件中读取数字并将其分配给 double,这样我就可以用它来计算它的成本。 我尝试使用:
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
struct info
{
string pavadinimas;
double benzinas, dujos, sumad, sumab,km, dujk,benzk, suma;
};
void skaityk (int &n, info S[], double dujk, double benzk, double km)
{
ifstream fd ("Duomenys.txt");
fd>>dujk >>benzk>> km;
fd>> n;
for (int i=1; i<=n; i++)
{
fd.ignore(80, '\n');
char simb [15];
fd.get (simb, 15);
S[i].pavadinimas=simb;
fd>>S[i].benzinas>>S[i].dujos;
}
fd.close();
}
文本文件内容为:
8.4 10.1 500 3
Orlen 4.56 2.32
Neste 4.66 2.43
Saurida 4.65 2.44
我想取前 3 个数字并数数,但无论我做什么,它们都变成 0 并且没有 fd>>dujk >>benzk>> km;
它搞砸了,所以我真的很困惑该怎么做
我被要求提供完整的代码,所以这里是:
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
struct info
{
string pavadinimas;
double benzinas, dujos, sumad, sumab,km, dujk,benzk, suma;
};
void skaityk (int &n, info S[], double &dujk, double &benzk, double &km)
{
ifstream fd ("Duomenys.txt");
fd>>dujk >>benzk>> km;
fd>> n;
for (int i=1; i<=n; i++)
{
fd.ignore(80, '\n');
char simb [15];
fd.get (simb, 15);
S[i].pavadinimas=simb;
fd>>S[i].benzinas>>S[i].dujos;
}
fd.close();
}
void rasyk (int n , info S[], double suma)
{
ofstream fr ("Rezultatai.txt");
fr<<fixed<<setprecision(2)<<suma<<endl;
for (int i=1; i<=n; i++)
fr<<S[i].pavadinimas<<fixed<<setw(8)<<setprecision(2)<<S[i].sumad;
};
double sumuokd (int n,info S[])
{
double s=0;
for (int i=1; i<=n; i++)
{
S[i].sumad=S[i].dujk*S[i].km*S[i].dujos;
}
};
int main()
{
int n;
info S[101];
double dujk, benzk, km;
skaityk(n,S, dujk, benzk, km);
for (int i=1; i<=n; i++)
cout<<S[i].pavadinimas<<fixed<<setw(8)<<setprecision(2)<<S[i].benzinas<<fixed<<setw(8)<<setprecision(2)<<S[i].dujos<<endl<<S[i].sumad<<endl;
return 0;
}
with the line Without the line
首先,C++ 中的表以 0 开头,因此您所有的 for 循环都应更改为:
for (int i=1; i<=n; i++)
进入:
for (int i=0; i<n; i++)
然后如果你想从函数中获取 dujk, benzk, km
值,你需要在你想从函数传递的每个值之前使用引用 (&):
void skaityk (int &n, info S[], double & dujk, double & benzk, double & km)
修改后的代码会输出
Orlen 4.56 2.32
Neste 4.66 2.43
Saurida 4.65 2.44
最后但同样重要的是,最好使用 std::vector 而不是普通数组。