2014-11-05 140 views
1

我试图从名为“parking.txt”的文件读入,并且我想从该文件读取某些值并将它们输出到屏幕。如何才能做到这一点?这可以做到吗?如何从C++中的文件读取

值在parking.txt是:

total 5 
One 400 
Five 300 
Ten 200 
Twenty 50 
Quarter 500 

在我的代码,我想从文件中的相应值来代替“行”。

#include <iostream> 
#include <fstream> 
#include <iomanip> 

using namespace std; 

int main() 
{ 
    ifstream inputFile ("parking_account.txt"); 
    string line; 

    getline(inputFile, line); 

    cout <<"\n\t-------------------------------------------------------"; 
    cout <<"\n\t======================================================="; 
    cout <<"\n\t    Parking Machine Accounts     "; 
    cout <<"\n\t======================================================="; 
    cout <<"\n\tSr. No. : Bill Name  : Bill Count : Cost(in$) "; 
    cout <<"\n\t-------------------------------------------------------"; 
    cout <<"\n\t  1 : One Dollar  : " << line << " : "; 
    cout <<"\n\t  2 : Five Dollar  : " << line << " : "; 
    cout <<"\n\t  3 : Ten Dollar  : " << line << " : "; 
    cout <<"\n\t  4 : Twenty Dollar : " << line << " : "; 
    cout <<"\n\t  5 : Quarter   : " << line << " : "; 

    cout<<"\n\tTotal bill types found : " <<line <<endl; 
} 

我已经尝试了while循环搜索一行行,但它与输出线相同的菜单更新的文本值的5。这是while循环。

int main() 
{ 
    ifstream inputFile ("parking_account.txt"); 
    string line; 

    getline(inputFile, line); 
    while (inputFile) 
    { 
     cout <<"\n\t-------------------------------------------------------"; 
     cout <<"\n\t======================================================="; 
     cout <<"\n\t    Parking Machine Accounts     "; 
     cout <<"\n\t======================================================="; 
     cout <<"\n\tSr. No. : Bill Name  : Bill Count : Cost(in$) "; 
     cout <<"\n\t-------------------------------------------------------"; 
     cout <<"\n\t  1 : One Dollar  : " << line << " : "; 
     cout <<"\n\t  2 : Five Dollar  : " << line << " : "; 
     cout <<"\n\t  3 : Ten Dollar  : " << line << " : "; 
     cout <<"\n\t  4 : Twenty Dollar : " << line << " : "; 
     cout <<"\n\t  5 : Quarter   : " << line << " : "; 

     cout<<"\n\tTotal bill types found : " <<line <<endl; 
     getline(inputFile, line); 
    } 
} 
+0

问题和摘要是指不同的输入文件,解决这个问题 – Basilevs 2014-11-05 03:55:54

+0

也从循环中移除示例输出,它用于演示,而不是重用。 – Basilevs 2014-11-05 03:59:12

回答

1

尝试使用提取运算符>>

string dummy; //this holds those separators since I have assumed that the numbers are always in the same order 
//alternately, you could extract this two `>>`'s at a time, processing the string that 
//comes befor the number to determine where it should go. For simplicity, I have 
//assumed that the order is always the same. 

int total one, five, ten, twenty, quarter; 
inputFile >> dummy >> total >> dummy >> one >> dummy >> five >> dummy >> ten >> dummy >> twenty >> dummy >> quarter; 

这样做是先提取你的 “总” 串入dummy。接下来,它将值“5”提取为整数total。在此之后,它将“1”提取为dummy,400,将one作为整数,将“2”提取为dummy,将“300”提取为作为整数的five等等。如果我错误地解释了你的字符串格式,它应该很简单,以修改上面的匹配。

然后,您可以取代你line变量与相应的变量的输出保持你对你的表(onefive等),感兴趣的值。

>>运算符由istream提供,对于这些类型的场景很有用。 (它是有用的注意,这适用于cin,以及因为cin的类是从istream下降,就像ifstreamistream下降)

0

你应该检查文件是否可以打开。 如果您可以打开文件,请将文件中的值读入您的变量。 你可以做这样的事情:

如果这是parking_account.txt

5 400 300 200 50 500 

这是的main.cpp

#include <iostream> 
#include <fstream> 
#include <iomanip> 

using namespace std; 

int main() 
{ 
    ifstream inputFile("parking_account.txt"); 
    string line = ""; 
    int total = 0; 
    int one = 0; 
    int five = 0; 
    int ten = 0; 
    int twenty = 0; 
    int quarter = 0; 

    if (!inputFile.is_open()) { 
    cerr << "Could not read from file" << endl; 
    } 
    else { 
    inputFile >> total >> one >> five 
    >> ten >> twenty >> quarter; 
    } 
    getline(inputFile, line); 

    cout <<"\n\t-------------------------------------------------------"; 
    cout <<"\n\t======================================================="; 
    cout <<"\n\t    Parking Machine Accounts     "; 
    cout <<"\n\t======================================================="; 
    cout <<"\n\tSr. No. : Bill Name  : Bill Count : Cost(in$) "; 
    cout <<"\n\t-------------------------------------------------------"; 
    cout <<"\n\t  1 : One Dollar  : " << one << " : "; 
    cout <<"\n\t  2 : Five Dollar  : " << five << " : "; 
    cout <<"\n\t  3 : Ten Dollar  : " << ten << " : "; 
    cout <<"\n\t  4 : Twenty Dollar : " << twenty << " : "; 
    cout <<"\n\t  5 : Quarter   : " << quarter << " : "; 

    cout<<"\n\tTotal bill types found : " << total <<endl; 

    return 0; 
}