无法使用文件填充数组

时间:2014-06-05 09:11:41

标签: c++ arrays file

早上好。

我开始学习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个?

有人可以帮帮我吗?

由于

1 个答案:

答案 0 :(得分:0)

如果您不使用C ++ 11,seekg不会重置文件的文件结束状态。

在开始之前添加myfile.clear()

浮点数的输出取决于流的当前精度 默认值为六(6)。

添加

 #include <iomanip>

std::cout << std::setprecision(10);
输出前<\ n> (但请记住,浮点本身并不精确,因此您不必获得与文件中​​完全相同的数字 - 只有最接近的数字。)