c++中关于getline函数读取数据的问题

40 Mars Bar
40 Toffee Crisp
30 Kit Kat
25 Toblerone
40 Bounty
50 Topic
0
前面为价钱后面为商品名 保存在一个txt文件中
如何读取价钱和商品名并且保存在2个数组中
0为结束标志 读到0停止
上面的信息都存在一个txt文件中
把价钱和商品名分别读取出来 用于下面的程序

getline的原型如下:
getline(char* c,int i,char c); 表示读入i个字符,或者遇到结束符c为止的字符数,保存到c中。
getline(char*,int); 表示读入i个字符到c中。注意读入的字符数应比实际的大1,因为读入的是字符串,字符串将会以'\0'作为结束,如果你要读入3个字符,那么i的值应该为4。

注意getline会读取并丢弃分界符。

后面的自已搞定,创建一个文件流类对象,然后用这个文件流来调用getline函数,比如
ifstream hy1(“hyong1.txt”)//创建hy1流,并打开文件以便读取内容。
char c[333];
hy1.getline(c,3,'0'); //表示,把hy1流关联的hyong1中3个字符或者遇到'0'的字符数读入到c中。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-06-14

getline会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成的此字符串结束。1)到文件结束,2)遇到函数的定界符,3)输入达到最大限度。

函数原型:

(1)istream& getline (istream& is, string& str, char delim);   

(2)istream& getline (istream& is, string& str);

其中:delim  为终结符,第二种形式 delim默认为 '\n'(换行符)。

例子:(2)

#include<iostream>  
#include<fstream>  
#include<string>  
  
using namespace std;  
  
int main()  
{  
    string buff;  
    ifstream infile;  
    ofstream outfile;  
    cout<<"Input file name: "<<endl;  
    cin>>buff;  
    infile.open(buff.c_str());  
  
    if(!infile)  
        cout<<"error"<<buff<<endl;  
      
    cout<<"Input outfile name: "<<endl;  
    cin>>buff;  
    outfile.open(buff.c_str());  
      
    while(getline(infile, buff))  
        outfile<<buff<<endl;  
  
    infile.close();  
    outfile.close();  
    return 0;  
  
}

   

第2个回答  2010-03-30
不用getline,直接用>>

不是说cin, cout, fstream 类也是支持>>的。你可以贴下你的代码

c++中使用getline读文件的问题
在c++中,getline函数是用来从标准输入流cin中读取整行数据的。即默认情况下,getline读的不是哪个文件,而是命令行中键盘的输入。要使用getline读文件,首先要做的就是将cin重定向到要读的文件中。可以采用以下代码实现 streambuf *backup;ifstream fin;fin.open("data.in"); \/\/打开要读的文件。bac...

C++中关于getline的一个问题!
第一个问题:getline这个函数的第二个参数n,是取的字符串的最大长度,当给出的字符串长度大于n的时候,就去前n个字符,这个是正常的情况。我觉得你把这个当成是一种异常了,认为会返回0.但实际上这个正确的情况。(哦,刚查到这个函数的返回值是一个流对象。这是个正常的函数调用,那么这个流对象...

c++中使用getline读文件的问题
在第一个cin.getline(ch,5); 结束后有一个回车符保留在缓存中,当执行到第二个cin.getline(ch,5); 函数读取保留在缓存中的回车符,认为已经结束读取,所以之后输入的第二串五个字符并没有读入ch中,当然ch为空,可以用cin.get();解决这个问题;具体操作如下:include<iostream> using namespace s...

C++ 中getline函数使用问题
getline()函数有两个版本,关于这个三个参数的版本,它的第一个参数是指向字符数组的指针,因为你定义的是:char *s(只说明s是指向字符类型的指针,但没有说明它是指向字符数组的),这样能通过编译,但会运行错误,因为编译器在编译时不知道s是指向字符数组的,它以为是指向一个字符的,就只为 s所...

C++ 使用getline():从文件中读取一行字符串
直接获取答案:C++中的getline()函数是一种强大的工具,用于从cin输入流或文件中读取一行字符串。它不仅适用于标准输入,也适用于fstream和ifstream这样的文件流对象。getline()方法有两种不同的语法形式:1. 用于从文件中读取bufSize-1个字符,直到遇到换行符或者达到指定长度,结尾自动添加'\\0'。这种方法...

为什么C++getline读取速度比C#readline读取速度慢这么多
C++使用getline,read()函数时要注意,可以看看它的源码。因为设置了很多状态量,所以读取其实是失败的。也是表象很慢的原因。提高方法:include <fstream> include <iostream> include <string> int main(){ std::ifstream file;char buf[64 * 1024];file.rdbuf()->pubsetbuf(buf, sizeof buf);file...

c++的getline()函数怎么使用?
在读取时,应注意防止文件输入流中字符数超过 bufSize,导致读取失败。实例:若 in.txt 文件内容为 c.biancheng.net\/cplus\/,使用 getline() 方法读取后输出结果为 c.biancheng.net\/cplus\/。修改为 in.getline(c,40,'c') 后,输出结果为 http:\/\/。若需读取多行数据,可连续调用 getline() 方法...

C++中,getline函数的详解
C++中本质上有两种getline函数,一种在头文件中,是istream类的成员函数。一种在头文件<string>中,是普通函数。在中的getline函数有两种重载形式:istream& getline (char* s, streamsize n );istream& getline (char* s, streamsize n, char delim );作用是从istream中读取至多n个字符保存在s对...

c++cin.getline的问题~~ cout<<"请输入十六进制整数:0xff"<<endl; ci...
cin.getline()是按行读取。当位数超过它限定的位数时会停止读取剩下的位数。你所谓的“吸收0后面的字符xff”应该是这样造成的吧。其语法是:cin.getline(字符指针,字符个数n,结束符);功能是:一次读取多个字符(包括空白字符),直到读满n-1个,或者遇到指定 的结束符为止(默认的是\\0)。char a[6]...

C++ getline函数的用法
”ni hao\\n",这个串被第一个getline读取后,因为正常读到了分隔符,认为输入数据并没有结束,第二个getline再次读取时,发现标准输入数据中没有内容,返回空串,同时标记输入数据结束。这个问题只会发生在标准输入上,读文件没有这个问题,读文件时第二个getline会读到第二行数据。

相似回答