Ⅰ c++中使用getline怎么读文件
在C++中,getline函数是用来从标准输入流cin中读取整行数据的。即默认情况下,getline读的不是哪个文件,而是命令行中键盘的输入。要使用getline读文件,首先要做的就是将cin重定向到要读的文件中。可以采用以下代码实现streambuf *backup; ifstream fin; fin.open("data.in"); //打开要读的文件。backup = cin.rdbuf(); // 备份cin本身的缓冲区。cin.rdbuf(fin.rdbuf()); // 将cin的缓冲区重定向到文件。// 执行需要的读操作,包括getline。cin.rdbuf(backup); // 恢复原始的cin缓冲区。在执行cin.rdbuf(fun.rdbuf());后就可以使用getline从文件中读取整行数据了。getline的调用方式为getline(char*buf,intsize);即读取一行数据,存到buf中,如果数据长度超过size指定的长度,那么只读size字节数据。
Ⅱ c++中cin.getline函数功能最好来个实例
cin.getline此函数是按行读取,其语法为cin.getline(i,b),i为要读取的数据,而b为要读取数据的长度.cin.getline(字符指针,字符个数N,结束符);功能是:一次读取多个字符,直到读满N个,或者遇到指定的结束符为止。例:#include <iostream>using namespace std;void main(){int a[10];cin.getline(a,sizeof(a));for(int i=0;i<10;i++){cout<<a[i]<<" ";}}输入:1 2 3 4 5 6 7 8 9 0输出:1 2 3 4 5 6 7 8 9 0不过不建议使用这个函数。
Ⅲ c++中使用getline读文件的问题
注意,getline函数是以回车作为结束符的,但它不会虑掉回车符。在第一个cin.getline(ch,5); 结束后有一个回车符保留在缓存中,当执行到第二个cin.getline(ch,5); 函数读取保留在缓存中的回车符,认为已经结束读取,所以之后输入的第二串五个字符并没有读入ch中,当然ch为空,可以用cin.get();解决这个问题;具体操作如下:#include<iostream> using namespace std; int main() { char ch[20]; cout<<"enter a sentence:"<<endl; cin.getline(ch,5); cin.get();cout<<"part 1:"<<ch<<endl; cin.getline(ch,5); cin.get();cout<<"part 2:"<<ch<<endl; return 0;在cin.get(ch,5);后添加cin.get();就可以读取多余的回车符那么下面的cin.getline(ch,5);就能正确读取
Ⅳ cin.get和cin.getline怎么读取string字符串
分为三种情况来看:1)输入的字符串不超过限定大小get(str,Size):读取所有字符,遇到'\n'时止,并且将'\n'留在输入缓冲区中,其将被下一个读取输入的操作捕获,影响该输入处理;getline(str,Size):读取所有字符,遇到'\n'时止,并且将'\n'直接从输入缓冲区中删除掉,不会影响下面的输入处理。2)输入的字符数超出限定的大小get(str,Size):读取Size-1个字符,并将str[Size-1]置为'\0',然后将剩余字符(包括'\n')留在输入缓冲区中,这些字符将被下一个读取输入的操作捕获,影响该输入处理;getline(str,Size):读取Size-1个字符,并将str[Size-1]置为'\0',剩余字符(包括'\n')留在输入缓冲区中,随即设置cin实效位(即if(!cin)的判断为真),关闭输入。其后的所有输入都无法得到任何东西,当然也无法得到输入缓冲区中剩余的字符串。但如果象本例一样用clear()重置cin,其后的输入便可用并会得到遗留在输入缓冲区中的字符。3)输入一个空行(即直接回车)get(str,Size):str将得到'\0',并设置cin实效位,关闭输入,但回车依然留在输入缓冲区中,因此如果我们用clear()重置cin,其下一个读取输入的操作将捕获'\n';getline(str,Size):str将得到'\0',并将'\n'删除掉,不置实效位,不关闭输入。所以对于cin.getline来说空行是合法的输入,且不会影响下面的输入处理。至于使用那个更好,可能因人习惯不同而不同,仁者见仁智者见智。对于我们编程来说,总希望能有更好的容错性,即便用户输入了不合理的输入,程序也应该能够 提示并能够重新输入或继续正常处理,而因为用户的输入问题而导致程序错误或其后的所有输入都不可用显然不是我们希望的。使用get(str,Size)和 getline(str,Size),都可能碰到设置失效位,关闭输入的情况,故都是需要考虑到相应的防错处理的。
Ⅳ c++ 如何用getline()实现指定位置文本的读取
#include <iostream>#include <fstream>#include <string>#include <vector>using namespace std;int main(){ ifstream inFile("1.txt"); vector<string> v; string s; while(getline(inFile, s)) v.push_back(s); inFile.close(); int n; cout << "输入要读的行数: "; cin >> n; try { cout << "该行内容为: " << v.at(n-1); } catch (const exception& e) { cerr << e.what(); }}
Ⅵ cin和getline连用读取非期望结果
以前也碰到过类似问题,你研究一下,看看能否有帮助:#include<iostream>#include<string>using namespace std;int main(){int a;int b;string p;string d;cout<<"请输入数字A和B"<<endl;cin>>a>>b;cout<<"您输入的A和B的值为:"\<<a<<"和"<<b<<","<<"A+B的值为"<<a+b<<endl;cout<<"请输入d的名字"<<endl;cin.ignore();getline(cin,d);cout<<"您输入的同学D的名字为"<<d<<endl;cout<<"请输入P的名字"<<endl;getline(cin,p);cout<<"您输入的同学p的名字为"<<d<<endl;cout<<"您输入的同学P和D的名字分别为"<<p<<"和"<<d<<endl;system("pause");return 0;}/*输入输出流这块是比较让人头疼的一片雷区,比较复杂。getline 有成员函数和非成员函数两个,你使用的是非成员函数。非成员函数的原型为:getline(istream &is,string str,char delimite)它读到 delimiter 或者与文件结束符是输入结束。默认回车换行将输入内容读入。第一中写法中在使用getline前进行过输入,回车换行将整数读入,再使用getline时,输入流对象在此之前发现有回车换行,所以它认为一次输入结束,所以d的内容你不能输入。而把顺序换一下上面的问题就能够避免,也就不会出现问题。解决方法,使用输入流成员数 ignore();它从被调用的流对象中读入一个字符(结束符)并丢弃。程序改为如下:#include<iostream>#include<string>using namespace std;int main(){int a;int b;string p;string d;cout<<"请输入数字A和B"<<endl;cin>>a>>b;cout<<"您输入的A和B的值为:"\<<a<<"和"<<b<<","<<"A+B的值为"<<a+b<<endl;cout<<"请输入d的名字"<<endl;cin.ignore();getline(cin,d);cout<<"您输入的同学D的名字为"<<d<<endl;cout<<"请输入P的名字"<<endl;getline(cin,p);cout<<"您输入的同学p的名字为"<<d<<endl;cout<<"您输入的同学P和D的名字分别为"<<p<<"和"<<d<<endl;system("pause");return 0;}建议不要混用。最简单的改法就是直接使用cin>>d;cin>>p;上述代码使用g++编译可正确运行。使用的vc,在vc下使用getline非成员数一般会出现错误,比如可能会多输入一行,这是vc下的一个bug。*//*getline()函数是接受两个形参:一个输入流对象和一个string对象,getline函数从输入流的下一行读取,并保存读取的内容到string中,但不包括换行符。和输入操作符不一样的是,getline并不忽略行开头的换行符。只要getline遇到换行符,即便它是输入的第一个字符,getline也将停止读入并返回。如果第一个字符就是换行符,则string参数将被置为空string。重要的是此函数的返回值:getline函数将istream参数作为返回值,和输入操作符一样也把它用作判断条件。也就是说比如你输入Taylor swift按回车键,此时已经把Taylor swift存放在name变量中了,但返回值是istream参数,即cin,会判断读入下一个流是不是可能的,但此时你又按回车键,判断不可以,然后就执行下一句!!!关于你输入的“fish”为什么没有输出,那是因为我们输入的第二个回车放入到缓存中了,结果把回车键给了变量dessert!!!我们可以在输入dessert之前先清除缓存:#include<iostream>#include<string>using namespace std;int main(){ string name; string dessert; cout<<"Enter your name:\n"; getline(cin,name); fflush(stdin);//清楚缓存 cout<<"Enter your favorite dessert:\n"; getline(cin,dessert); cout<<"I have some delicious "<<dessert; cout<<" for you,"<<name<<".\n"; return 0;}*/
Ⅶ c++ cingetline是怎样用的
对于cin.get(str,20)这样的调用,(假设输入的字符串小于等于19个有效字符)。那么,总是会多出一个换行符在输入流当中,因为cin.get(str,20)保留换行符,因此,这个时候需要一个cin.get()这样的调用吃掉'\n'这个换行符。这是cin.get(str,20) 跟 cin.getline(str,20)的主要差别。 一般情况,当长度估计在范围内时,用cin.get(str,20).get(); 或 cin.getline(str,20),后者自动忽略并丢弃输入流当中的换行符。
Ⅷ C++读取文件getline 如何用getline整行读取txt文件内部的信息 高手指教
示意:来ifstream in;in.open("myfile.txt"); // 文件名为myfile.txtin.getline(str, 80);// str是预源先定义的字符数组,最大长度为80//不过文本文件的一行也要小于80,这句话读到'\n'为止
Ⅸ c++读入文件时getline函数怎么使用
getline常用的就两种用法:
1.getline(input,str);2.getline(input,str,delim);
input就是从哪里读入,通常是cin
str是你的读入字符串,
delim是分隔符。
例如:
stringstr;getline(cin,str,'');//用换行符专分割每行
然后属判断读入完成也是容易的,
直接用返回值就好了。
例如:
stringstr;while(getline(cin,str)){cout<<str;}