读书人

文件读取的有关问题

发布时间: 2012-04-22 18:34:46 作者: rapoo

文件读取的问题
在学习文件的读写
遇到这样一个问题
一个文件的内容是
2
ABC
2000
QWE
200
然后我就在网上搜了下,发现这样才能正常读取
patrons为自定义结构

C/C++ code
inFile>>number;Patron * patrons = new Patron[number];for (int i=0; i<number; ++i){inFile.get();getline(inFile, patrons[i].name);inFile>>patrons[i].donations;}

我有几点不明白
1.inFile.get();表示什么意思?
2.getline(inFile, patrons[i].name);又表示什么?是不是和cin.geiline()是一样的效果?
3.不看上面的,如何逐行读取?
谢谢各位了

[解决办法]
inFile.get();获得一个字符,一般输入的时候回车符还停留在缓冲区,所以为了能够正确的获得数据就必须先获得一个字符,其实这个字符就是回车符。
getline(inFile, patrons[i].name);和cin.getline差不多的,只不过获得的来源不一样而已。
[解决办法]
C/C++ code
#include <iostream>    // 数据流输入/输出#include <string>      // 字符串类using namespace std;struct Patron {    string name;    int donations;};int main(){    fstream inFile("a.txt", fstream::in);    int number;    inFile >> number;    Patron * patrons = new Patron[number];    for (int i = 0; i!= number; ++i) {        inFile.get(); // 主要功能是跳过第一行末尾的换行        getline(inFile, patrons[i].name);        inFile >> patrons[i].donations;        cout << patrons[i].name << "\t" << patrons[i].donations << endl;    }    return 0;}/*  * get * 语法: * int get(); * istream &get( char &ch ); * istream &get( char *buffer, streamsize num ); * istream &get( char *buffer, streamsize num, char delim ); * istream &get( streambuf &buffer ); * istream &get( streambuf &buffer, char delim ); *  * get()函数被用于输入流,和以下这些: *  * 读入一个字符并返回它的值, * 读入一个字符并把它存储在ch, * 读取字符到buffer直到num - 1个字符被读入, 或者碰到EOF或换行标志, * 读取字符到buffer直到已读入num - 1 个字符,或者碰到EOF或delim(delim直到下一次不会被读取), * 读取字符到buffer中,直到碰到换行或EOF, * 或是读取字符到buffer中,直到碰到换行,EOF或delim。(相反, delim直到下一个get()不会被读取 ). *  *//* getline  * 语法:  *   istream &getline( char *buffer, streamsize num ); *   istream &getline( char *buffer, streamsize num, char delim ); *  * getline()函数用于输入流,读取字符到buffer中,直到下列情况发生:  *  * num - 1个字符已经读入,  * 碰到一个换行标志, * 碰到一个EOF,  * 或者,任意地读入,直到读到字符delim。delim字符不会被放入buffer中。  */ 

读书人网 >C++

热点推荐