早上好。
我开始学习c ++而我正在尝试制作一种从一种货币转换为另一种货币的编程。
我创建了一个文本文件“currency.txt”,其中我有一个接一个的所有货币,每个货币有4行:
国家/地区,货币说明,货币代码,汇率。
到目前为止,我制作了以下代码:
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
using namespace std;
struct currency {
string country;
string coin;
string code;
double rate;
};
int count_lines ( ifstream &myfile ){
string line;
int lines = 0;
if ( myfile.is_open() ){
while ( getline( myfile, line ) ){
++lines;
}
} else cout << "error";
myfile.seekg (0, ios::beg);
return lines;
}
void read_coins ( currency coins[], ifstream &myfile, int lines) {
string line;
if ( myfile.is_open() ){
for ( int n=0; n<lines; n++){
getline( myfile, line );
coins[n].country = line;
getline( myfile, line );
coins[n].coin = line;
getline( myfile, line );
coins[n].code = line;
getline( myfile, line );
stringstream(line) >> coins[n].rate;
}
} else cout << "error";
myfile.seekg (0, ios::beg);
}
int main(){
ifstream myfile ( "currency.txt" );
int lines;
lines = count_lines ( myfile )/4;
currency coins [lines];
read_coins (coins, myfile, lines);
for (int n=0; n<lines; n++){
cout << coins[n].country << '\t';
cout << coins[n].coin << '\t';
cout << coins[n].code << '\t';
cout << coins[n].rate << endl;
}
myfile.close ();
return 0;
}
但它只是不起作用。如果我打开文件里面的所有功能,但不是这样的。 我知道肯定有问题,但我还是无法理解它。
我还有另一个问题:交换率有10位小数,但是当我把它放在我的硬币[n] .rate中时,它只有5 ou 6个十进制数字。无论如何都要获得全部10个?
有人可以帮帮我吗?
由于
答案 0 :(得分:0)
如果您不使用C ++ 11,seekg
不会重置文件的文件结束状态。
在开始之前添加myfile.clear()
。
浮点数的输出取决于流的当前精度 默认值为六(6)。
添加
#include <iomanip>
和
std::cout << std::setprecision(10);
输出前<\ n>
(但请记住,浮点本身并不精确,因此您不必获得与文件中完全相同的数字 - 只有最接近的数字。)