您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > c++ primer plus C++培训(华信IT)第一至四章- 02
01-01-01-01-919191914.2.44.2.44.2.44.2.4每次读取一行字符串输入1.1.1.1.面向行的输入:getline():getline():getline():getline()getline()getline()getline()getline()函数读取整行,,,,它使用通过回车键输入的换行符来确定输入结尾....要调用这种方法,,,,可以使用cin.getline().cin.getline().cin.getline().cin.getline().该函数有两个参数....第一个参数是用来存储输入行的数组的名称,,,,第二个参数是要读取的字符数....如果这个参数为20,20,20,20,则函数最多读取19191919个字符,,,,余下的空间用于存储自动在结尾处添加的空字符....getline()getline()getline()getline()成员函数在读取指定数目的字符或遇到换行符时停止读取....例如,,,,假设要使用getline()getline()getline()getline()将姓名读入到一个包含20202020个元素的namenamenamename数组中....可以使用这样的函数调用::::Cin.getline(name,20);Cin.getline(name,20);Cin.getline(name,20);Cin.getline(name,20);01-01-01-01-929292924.2.44.2.44.2.44.2.4每次读取一行字符串输入#includeiostreamintmain(){usingnamespacestd;constintArSize=20;charname[ArSize];chardessert[ArSize];coutEnteryourname:\n;cin.getline(name,ArSize);//readsthroughnewlinecoutEnteryourfavoritedessert:\n;cin.getline(dessert,ArSize);coutIhavesomedeliciousdessert;coutforyou,name.\n;return0;}01-01-01-01-939393934.2.44.2.44.2.44.2.4每次读取一行字符串输入2.2.2.2.面向行的输入:getgetgetget()istreamistreamistreamistream类有另一个名为getgetgetget()的成员函数,该函数有几种变体。其中一种变体的工作方式与getlinegetlinegetlinegetline()类似,它们接受的参数相同,解释参数的方式也相同,并且都读取到行尾。但getgetgetget并不再读取并丢弃换行符,而是将其留在输入队列中。假设我们连续两次调用getgetgetget():cin.get(name,ArSize);cin.get(name,ArSize);cin.get(name,ArSize);cin.get(name,ArSize);cin.get(dessert,Arsize);//aproblemcin.get(dessert,Arsize);//aproblemcin.get(dessert,Arsize);//aproblemcin.get(dessert,Arsize);//aproblem01-01-01-01-949494944.2.44.2.44.2.44.2.4每次读取一行字符串输入由于第一次调用后,换行符将留在输入队列中,因此第二次调用时看到的第一个字符便是换行符。因此getgetgetget()认为已到达行尾,而没有发现任何可读取的内容。如果不借助与帮助,getgetgetget()将不能跨过该换行符。getgetgetget()有另一种变体。使用不带任何参数的cin.getcin.getcin.getcin.get()调用可读取下一个字符啊(即使是换行符),因此可以用它来处理换行符,为读取下一行输入做好准备。可以采用下面的调用序列:cin.get(name,ArSize);//readfirstlinecin.get(name,ArSize);//readfirstlinecin.get(name,ArSize);//readfirstlinecin.get(name,ArSize);//readfirstlinecin.get();//readnewlinecin.get();//readnewlinecin.get();//readnewlinecin.get();//readnewlinecin.get(dessert,ArSize);//readsecondlinecin.get(dessert,ArSize);//readsecondlinecin.get(dessert,ArSize);//readsecondlinecin.get(dessert,ArSize);//readsecondline01-01-01-01-959595954.2.44.2.44.2.44.2.4每次读取一行字符串输入另一种使用getgetgetget()的方式是将两个大类成员函数拼接起来(合并),如下所示:Cin.get(name,ArSize).get();//Cin.get(name,ArSize).get();//Cin.get(name,ArSize).get();//Cin.get(name,ArSize).get();//之所以可以这样做,是由于cin.get(name,ArSize)cin.get(name,ArSize)cin.get(name,ArSize)cin.get(name,ArSize)返回一个cincincincin对象,该对象随后将被用来调用getgetgetget()函数。同样,下面的语句:Cin.getline(name1,ArSize).getline(name2,ArSize);Cin.getline(name1,ArSize).getline(name2,ArSize);Cin.getline(name1,ArSize).getline(name2,ArSize);Cin.getline(name1,ArSize).getline(name2,ArSize);为什么要使用getgetgetget(),而不是getlinegetlinegetlinegetline()呢?首先,老式实现没有getlinegetlinegetlinegetline()。其次,getgetgetget()使输入更仔细。例如,假设用getgetgetget()将一行读入数组中。如何知道停止读取的原因是由于已经读取了整行;否则说明该行中还有其他输入。01-01-01-01-96969696getline()getline()getline()getline()读取并替换换行符代码:charname[10];cout“Enteryourname:”;cin.getline(name,10);用户键入Jud来做出响应,然后在按下回车enteryourname:Jud回车cin.getline()读取“Jud”以及用户按Enter键而生成的换行符,并将换行符替换为空字符Jud\0换行符被替换为空字符01-01-01-01-979797974.2.44.2.44.2.44.2.4每次读取一行字符串输入#includeiostreamintmain(){usingnamespacestd;constintArSize=20;charname[ArSize];chardessert[ArSize];coutEnteryourname:\n;cin.get(name,ArSize).get();//readstring,newlinecoutEnteryourfavoritedessert:\n;cin.get(dessert,ArSize).get();coutIhavesomedeliciousdessert;coutforyou,name.\n;return0;}01-01-01-01-989898984.2.44.2.44.2.44.2.4每次读取一行字符串输入3333空行和其他问题当getlinegetlinegetlinegetline()或getgetgetget()读取空行时,将发生什么情况?最初的做法是,下一条输入语句将在前一条getlinegetlinegetlinegetline()或getgetgetget()结束读取的位置开始读取;但当前的做法是,当getgetgetget()(不是getlinegetlinegetlinegetline())读取空行后将设置失效位(failbitfailbitfailbitfailbit)。这意味着接下来的输入将被阻断,但可以用下面的命令来恢复输入:cin.clearcin.clearcin.clearcin.clear();输入字符串可能比分配的空间长。如果输入行包含的字符数比指定的多,则getlinggetlinggetlinggetling()和getgetgetget()将把余下的字符留在输入队列中,而getlinegetlinegetlinegetline()还会设置失效位,并关闭后面的输入。01-01-01-01-999999994.2.54.2.54.2.54.2.5混合输入字符串和数字#includeiostreamintmain(){usingnamespacestd;coutWhatyearwasyourhousebuilt?\n;intyear;cinyear;coutWhatisitsstreetaddress?\n;charaddress[80];cin.getline(address,80);coutYearbuilt:yearendl;coutAddress:addressendl;coutDone!\n;return0;}01-01-01-01-1001001001004.2.54.2.54.2.54.2.5混合输入字符串和数字•使用string类,必须在程序程序中包含头文件string。•String类位于名称空间std中,因此您必须提供一条using编译指令,或者使用std::string来引用它。•String类定义隐藏了字符串的数组性质,让您能够像处理普通变量那样处理字符串。01-01-01-01-1011011011014.3string4.3string4.3string4.3string类简介#includeiostream#includestring//makestringclassavailableintmain(){usingnamespacestd;charcharr1[20];//createanemptyarraycharcharr2[20]=jaguar;//createaninitializedarraystringstr1;//createanemptystringobjectstringstr2=panther;//createaninitializedstringcoutEnterakindoffeline:;cincharr1;01-01-01-01-1021021021024.3string4.3string4.3string4.3string类简介coutEnteranotherkindoffeline:;cinstr1;//usecinforinputcoutHerearesomefeli
本文标题:c++ primer plus C++培训(华信IT)第一至四章- 02
链接地址:https://www.777doc.com/doc-957116 .html