2011-12-02 40 views
2

我正在使用C++中的程序,并且需要从文件中读取整个字符串。该文件在其中一行上包含地址,例如“123 Easy Ave”,必须将其拖入一个字符串或字符中。下面是我的代码有:从C++中的文件中读取整行

数据文件:

Matt Harrold 
307C Meshel Hall 
1000 .01 4 

的数据是由该成为客户名称第一个和最后一个名字,下一行是为填充地址的地址,然后三个数字:原则,InterestRate,年份。

代码:

float InterestRate = 0; 
int Years = 0; 
char Junk [20]; 
int FutureValue; 
float OnePlusInterestRate; 
int YearNumber; 
int count = 0; 
char CustomerName; 
string Address; 
int * YearsPointer; 


     CustomerFile >> CustomerName 
       >> Address 
       >> Principle 
       >> InterestRate 
       >> Years; 

现在它只吸入“103C”,并在空间停止...帮助是非常感谢!

+0

哪里都是变量的休息吗?为什么你只是告诉我们'地址'?所有的变量都是字符串吗? – juliomalegria

+0

听起来像给我作业。 – Anthony

+0

我在文件中没有看到“103C”,你的意思是“307C”吗? – juliomalegria

回答

3

编辑:在回复我的问题的反馈,我编辑它使用更合适的std::getline而不是std::istream::getline。这两个都足够了,但std::getline更适合std::string s,您不必担心指定字符串大小。

使用std::getline()<string>

这里有一个很好的参考和示例:http://www.cplusplus.com/reference/string/getline/

您还需要小心结合提取(>>)运营商和getline。这个问题的最佳答案(cin>> not work with getline())简要解释了它们不应该一起使用的原因。总之,cin >>(或任何输入流您正在使用)的调用离开流中的换行,然后由getline捞起,给你一个空字符串。如果你真的想一起使用它们,你必须在两次通话之间拨打std::istream::ignore

+1

不。 。 。 。 。 –

+0

不要一起使用它们,或者找不到文章?我同意不应该使用它们,但是我认为找到一篇文章来向OP展示它们不应该一起使用的理由是个好主意。 –

+1

我的意思是,不要使用'std :: istream :: getline'。它只能读取指定数量的字符,或者需要一个无限的缓冲区,这非常不错。对于C++编程,这个建议与提示C程序员他应该使用'gets'一样差。 –

3

使用来自<string>标题的std::getline