2011-09-22 161 views
1

在我的计划,我输入一个文件,并在文件中是这样的:I/O C++从文本文件阅读

11267 2 500.00 2.00

...那是一条线。有相同的顺序设置更多的行。我需要将第一个号码11267输入到actnum。在那之后,2转换为choice等等。我简单地没有找出如何将第一个5位数字输入到第一个变量的逻辑。

actnum = 11267; 
choice = 2; 

编辑*

我都认为:

#include <fstream> 
#include <iostream> 
using namespace std; 



void main() 
{ 
    int trans = 0, account; 
    float ammount, bal; 

    cout << "ATM" << endl; 

等等等等

我只是不知道如何得到它只有输入具体的数字了进去。就像我在做“actnum”选择时一样,它是如何知道只把前5个数字放在里面的?

回答

1

fscanf是你在找什么。它与scanf相同,但是用于文件。

unsigned int actnum, choice; 
float float1, float2; 

FILE *pInputFile = fopen("input.txt", "r"); 

fscanf(pInputFile, "%u %u %f %f", &actnum, &choice, &float1, &float2); 
+0

虽然这是用C stdio库,而不是C++的fstream的,我找到了简洁的格式字符串更具可读性。特别是格式更复杂。 – nimrodm

+0

不要忘了在程序开始时'#include ',否则这个程序不会编译 –

+1

如果你要这样做,最好'#include '而不是。它应该更好地用C++ –

1
input_file_stream >> actnum >> choice >> ... 
+2

+ +1来实现它。只是一个建议:要清楚的是'input_file_stream'是'的std :: ifstream'和OP指向文档 –

+0

我都认为: 的#include 的#include 使用命名空间std; void main() { \t int trans = 0,account; \t float ammount,bal; \t cout <<“ATM”<< endl; etc etc 我只是不知道如何让它只输入到它的具体数字。就像我在做“actnum”选择时一样,它是如何知道只把前5个数字放在里面的? – Brisil

+0

这些是5位数字,但是是单个数字。当你提取一个整数时,它读取它可以解释一个整数,而空格标记它的结束。 –

2

使用C++ <fstream>库。 fscanf()是略显过时,你可能会从<fstream>获得更好的性能,更何况该代码是一个更容易阅读:

#include <fstream> 
using namespace std; 

ifstream fileInput("C:\foo.txt"); 
fileInput >> actnum >> choice >> float1 >> float2; 
+2

+1快速,删除“*,你可能会从'' *”获得更好的性能,然后进行一些微型优化,这是一个邪恶的家伙出现并无缘无故地降低了你的评价。 –

+0

@muntoo笑,如果它运行得更快,他们应该是幸福的:)另外,即使不运行速度更快,可读性是显著奖金(特别是C++) –

+0

我都认为: 的#include #包括 using namespace std; void main() { \t int trans = 0,account; \t float ammount,bal; \t cout <<“ATM”<< endl; etc etc 我只是不知道如何让它只输入到它的具体数字。就像我在做“actnum”选择时一样,它是如何知道只把前5个数字放在里面的? – Brisil