在c ++中从文件中读取整行
Posted
技术标签:
【中文标题】在c ++中从文件中读取整行【英文标题】:Reading a whole line from file in c++ 【发布时间】:2011-12-02 04:35:40 【问题描述】:我正在使用 c++ 编写程序,我需要从文件中读取整个文本字符串。该文件包含像“123 Easy Ave”这样的行之一的地址,必须将其拉入一个字符串或字符中。这是我的代码:
数据文件:
Matt Harrold
307C Meshel Hall
1000 .01 4
数据由名字和姓氏组成,成为CustomerName,下一行是要填充Address的地址,然后是三个数字:principal,InterestRate,Years。
代码:
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”并停在空间...非常感谢帮助!
【问题讨论】:
其余变量在哪里?为什么你只给我们看Address
?所有的变量都是字符串吗?
我在文件中没有看到“103C”,您的意思是“307C”吗?
我认为这是一个很好的家庭作业问题,如果它能让你停下来思考。如果你已经知道怎么做,那么家庭作业是没有意义的:) 这是一个常见的问题,所以知道如何解决它是件好事。
【参考方案1】:
编辑:针对我的问题的反馈,我对其进行了编辑以使用更合适的std::getline
而不是std::istream::getline
。这两个都足够了,但std::getline
更适合std::string
s,您不必担心指定字符串大小。
使用<string>
中的std::getline()
。
这里有一个很好的参考和示例:http://www.cplusplus.com/reference/string/getline/。
您还需要小心组合提取 (>>
) 运算符和 getline
。这个问题的最佳答案 (cin>> not work with getline()) 简要解释了为什么它们不应该一起使用。简而言之,对cin >>
(或您正在使用的任何输入流)的调用会在流中留下一个换行符,然后由getline
拾取,给您一个空字符串。如果你真的想同时使用它们,你必须在两次调用之间调用std::istream::ignore
。
【讨论】:
不要一起用,还是找不到文章?我同意它们不应该被使用,但我认为找到一篇文章来向 OP 展示为什么它们不应该一起使用是个好主意。 我的意思是,不要使用std::istream::getline
。它最多只能读取指定数量的字符,或者需要无限的缓冲区,这很糟糕。对于 C++ 编程,这个建议与建议 C 程序员应该使用 gets
一样糟糕。
@Dani:你知道当你不关心缓冲区大小时会发生什么吗? en.wikipedia.org/wiki/Morris_worm 来人,这是什么? 23岁?程序员现在应该更清楚了。
@R.MartinhoFernandes:也许你喜欢让你的家庭作业符合军事标准,但我们大多数人不喜欢(我希望)
@Dani:我不喜欢冒充坏习惯。关于防止缓冲区溢出,没有什么“军事标准安全”。它实际上是“普通的安全”。【参考方案2】:
使用 <string>
标头中的 std::getline
。
【讨论】:
以上是关于在c ++中从文件中读取整行的主要内容,如果未能解决你的问题,请参考以下文章