今天编程遇到一个问题,从txt读555 111 9999,然后显示出来,结果开始程序一直只显示555;之后经过网页搜索终于找到了问题所在;
在使用getline()时,我们需要明白其原理:
getline (char* s, streamsize n, char delim );
第一个参数是存储的位置,第二个是读取的最大字符数,第三个参数是终结符,默认为'\n',你可以自行设置
你的程序里,默认使用'\n'为终结符,才导致每次读取一行的问题,根据你的输入格式,你可以用空格作为终结符,这样可以只输入一行即可。
如果,你仍然使用'\n'作为终结符(默认),而且只输入一行,你理解的是444后面没有读到,是不对的。其实是在读取555后,输入流input错误了。针对第一个getline(buf,4);默认终结符'\n',输入是555 111 9999,在读第四个字符时,判断是否是'\n',若是则结束,若不是则输入流发生错误,这是你输入过多导致。
解决方式是:在之后加上input.clear();清空输入流状态。
部分代码如下:
int a, ex, num;
char buf[35];
Input.getline(buf, 25);
mylist[i].SetName(buf);
Input.getline(buf, 30);
mylist[i].SetAddress(buf);
Input.getline(buf, 4);
a = atoi(buf);
Input.clear();
Input.getline(buf, 5);
ex = atoi(buf);
Input.clear();
Input.getline(buf, 7);
num = atoi(buf);
Input.clear();
mylist[i].SetPhone(a, ex, num);
cout.setf(ios::left);