文件读取的有关问题
文件读取的问题
在学习文件的读写
遇到这样一个问题
一个文件的内容是
2
ABC
2000
QWE
200
然后我就在网上搜了下,发现这样才能正常读取
patrons为自定义结构
我有几点不明白
1.inFile.get();表示什么意思?
2.getline(inFile, patrons[i].name);又表示什么?是不是和cin.geiline()是一样的效果?
3.不看上面的,如何逐行读取?
谢谢各位了
------解决方案--------------------
inFile.get();获得一个字符,一般输入的时候回车符还停留在缓冲区,所以为了能够正确的获得数据就必须先获得一个字符,其实这个字符就是回车符。
getline(inFile, patrons[i].name);和cin.getline差不多的,只不过获得的来源不一样而已。
------解决方案--------------------
在学习文件的读写
遇到这样一个问题
一个文件的内容是
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中。 */