使用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 很明显后面没读到

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/25 12:46:46
使用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 很明显后面没读到
xV[SF+n:$e53܂<4`1&&6 Jz_YlCLٳ~;= ;x>;蠀O^o%r_,V9ʢfޮWwvk)3l>cCڰ6='iHF>x_`q*IR ܋Une?2.2xko]ʜS_ykgAGN]忢ݩ a&:\q橳[fWq-$r% 5>FGhd${\Yܢ:} `. 2ĹW@|:˧v=g?dUrzUooREt:Ok .p{zROPt`2c^tΞ8^p 5Ujғ7Bwt pZ2RL'JFk$$,uiP{v#Gg_9` CJ?W@=Pӵ ڶxʑ ? Њ+t jC(S¶v+D/Pd`M-8;䴽d(<92.peYq;Wx ZJBBwQm^($,m<d  X|%8se99e~P}?8Uf֖[=| )`6 l;Zzz) &x!jm7Vgl]By ~`wWSA sg0΢vg:K?uNѫ/yn'jpP6#ĨRl@M= vFsT}N[Dյ9GqS9z[I DžaYjxS,UXW%15DED+lMM ]TMg/s@yExmX7ňDE9dT#QŘhH! !ypeyQZdAjpI"#WBu*shO>`^]I(3/Dr#~({^I7AOWָam1SVyUM˂&ipbSͨ\D5CMDI9Au2 VT)(rL(F44MC >rMtkKr]jz?.Z@Uxlp xhĞ rRG:5@m.D-:0PӪ\^0 ^ )&r% .}=dȥ;&>ax2XwU:b?XGB){Knm֧&i#( IVD QS%*HL р(AХSNQ=&[5E,* i+ .&D4YUCRney0_Oި5prRK7ٛP

使用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函数如何多次读取同一行
这是程序中的一段代码
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函数如何多次读取同一行这是程序中的一段代码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函数的形式,使用.
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!