
使用getline函数如何多次读取同一行
input.getline(buf,4);
a=atoi(buf);
input.getline(buf,5);
ex=atoi(buf);
input.getline(buf,7);
num=atoi(buf);
这是数据444 111 9999
输出后只有444 很明显后面没读到 后来我知道getline每次只读取一行并且自动加上\n这样接下去读取的就是下一行 怎样让它接下去读取
我又发现不仅仅是同一行的问题
如果将数据改为:
444*(后面随意多出一个东西包括空格)
111
9999
就不可以
也就是说如果遇到所读取的数据大于它的最大值(input.getline(buf,4);)4.就无法读入下面的数据 怎么解决
后来又查到如果输入的数据大于i会发出溢出,程序就会错乱,是不是这样的?
PS:此程序是从书上看到的,为什么书上这样的格式就可以 而我的不行 注:代码无错 展开
首先要明白getline函数的形式,使用。
getline (char* s, streamsize n, char delim );
第一个参数是存储的位置,第二个是读取的最大字符数,第三个参数是终结符,默认为'\n',你可以自行设置
你的程序里,默认使用'\n'为终结符,才导致每次读取一行的问题,根据你的输入格式,你可以用空格作为终结符,这样可以只输入一行即可。具体看金色潜鸟的例子。
如果,你仍然使用'\n'作为终结符,而且只输入一行,你理解的是444后面没有读到,是不对的。其实是在读取444后,输入流input错误了。针对第一个getline(buf,4);默认终结符'\n',输入是444 111 9999,在读第四个字符时,判断是否是'\n',若是则结束,若不是则输入流发生错误,这是你输入过多导致。解决方式是:在之后加上input.clear();,清空输入流状态。实例如下:
正确读取。对于getline不能简单理解为每次读取一行!
再解释为什么分3次输入时,在444后加空格为什么读取出错。
我只输入了444a回车111回车,程序就判定完成输入。你的第一个getline最多读取3个字符,判断第4个字符,确定是否正常结束读取。第四个字符不是'\n',输入流发生错误,后续的输入流就失效了,需要使用clear()才能继续使用。第二个getline时,输入的第5个字符是'\n',所以正常结束,读取字符串为a。输出的第二个就是0了。可以把每次读取的结果输出来验证一下:
第一个输出是444,第二个输出是a!
这个程序是书上的,那为啥书上这样就可以呢,是书错了吗
是英文翻译过来的,感觉应该可信度比较高吧
事实胜于雄辩呀,也许是书上的例子不完善
应选则符合输入数据格式,数据大小的 读函数 -- 用斧头砍柴,用菜刀切菜。
若一定要 用菜刀砍柴,用 斧头切菜 就成了难题。
getline 有第3个参数:
getline (char* s, streamsize n, char delim );
如果你要求用空格作分隔符:
char buff[10];
std::cin.getline (buff,4,' ');
cout << "1: "<< buff << endl;
std::cin.getline (buff,5,' ');
cout << "2: " << buff << endl;
std::cin.getline (buff,7);
cout << "3: " << buff << endl;
输入数据: 444 111 9999
------------------
其实,你要用空白作分隔符,直接用 cin << buff1 << buff2 <<buff3 很方便
用斧头砍柴,用菜刀切菜 就可以了。
cin.getline(字符数组(或字符指针), 字符个数n, 终止标志字符)
用getline函数读入一行字符。
#include <iostream>
using namespace std;
int main( )
{
char ch[20];
cout<<"enter a sentence:"<<endl;
cin>>ch;
cout<<"The string read with cin is:"<<ch<<endl;
cin.getline(ch,20,'/'); //读个字符或遇'/'结束
cout<<"The second part is:"<<ch<<endl;
cin.getline(ch,20); //读个字符或遇'/n'结束
cout<<"The third part is:"<<ch<<endl;
return 0;
c++:
C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。C++支持多种编程范式 --面向对象编程、泛型编程和过程化编程。最新正式标准C++14于2014年8月18日公布。[1] 其编程领域众广,常用于系统开发,引擎开发等应用领域,是至今为止最受广大程序员受用的最强大编程语言之一,支持类:类、封装、重载等特性。}