在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::strings,您不必担心指定字符串大小。

使用<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 ++中从文件中读取整行的主要内容,如果未能解决你的问题,请参考以下文章

在C#中从CSV到Datagridview读取不同的值

在 iPhone 模拟器中从硬盘读取文件

c语言中从文件中按行读取字符串,并进行相应操作。

mule 在流程中从类路径中读取单个文件

在 C# Web 应用程序中从网络共享访问文件

在bash中从用户输入中读取文件并存储在变量中。