2016-10-10 18 views
1

ファイルから3つの配列にデータを読み込む関数があります。各行を別の配列にする。最初の2つはstring型で、3つ目はdouble型です。私が理解できないような何らかの理由で、ダブルを読む行がコメントアウトされていないとき、最初の3行だけが正しく表示されます。ファイルからのデータをC++の複数の配列に読み込む

const int SYMB_LEN = 25; 
const int NAME_LEN = 25; 
void read_stocks(char[][SYMB_LEN], char[][NAME_LEN], double[]); 

int main() { 
    char symble[10][SYMB_LEN]; 
    char name[10][NAME_LEN]; 
    double price[10]; 
    read_stocks(symble, name, price); 
    system("pause"); 
    return 0; 
} 

void read_stocks(char symble[][SYMB_LEN], char name[][NAME_LEN], double price[]) { 
    ifstream fin; 
    fin.open("c://cplusplus//stocks.dat"); 

    if (!fin) { 
     cout << "Data file not found."; 
     exit(1); 
    } 
    price[0] = 0; 
    unsigned int temp = 0; 
    while (!fin.eof() && temp < 10) { 
     fin.getline(symble[temp], SYMB_LEN); 
     fin.getline(name[temp], NAME_LEN); 
     fin >> price[temp]; 
     cout << symble[temp] << endl; 
     cout << name[temp] << endl; 
     cout << price[temp] << endl; 
     //cout << temp << endl; 
     temp++; 
    } 
    fin.close(); 
} 

これは私が読んでいるファイルには何がある:

AAPL 
Apple Computer 
27 
LU 
Lucent Technologies 
72 
NSCP 
Netscape 
27.75 
MOT 
Motorola 
49.5 
PLAT 
Platinum Technologies 
24.125 
SEEK 
Infoseek 
32.5 
YHOO 
Yahoo 
126 
T 
AT&T 
63 
PSFT 
Peoplesoft 
42.25 
PPOD 
Peapod 
4.5 
+0

明らかではありません。何が起こるのでしょうか?投稿したコードは何を印刷しますか? – user463035818

答えて

1

をダブルを読んだ後、あなたは番号の後に改行を読む必要があります。

fin.getline(symble[temp], SYMB_LEN); 
fin.getline(name[temp], NAME_LEN); 
fin >> price[temp]; 
fin.ignore(numeric_limits<streamsize>::max(), '\n'); //add this 
+0

ありがとうございます。あなたはどのように、なぜこのような理由があるかを説明するリンクを知っていますか? – Elchanan

関連する問題