做盗文网站,wordpress 极简博客,直播交友app开发,软件开发与项目管理就业前景原标题#xff1a;C基础#xff1a;各种输入方法总结cin.get()、在C中#xff0c;各种输入方法还是不少的#xff0c;而且各有所异#xff0c;本文做一点简要总结#xff0c;主要涉及如下内容#xff1a;cin、cin.get()、cin.getline()、getline()、gets()、getchar()。…原标题C基础各种输入方法总结cin.get()、在C中各种输入方法还是不少的而且各有所异本文做一点简要总结主要涉及如下内容cin、cin.get()、cin.getline()、getline()、gets()、getchar()。输入原理简述程序的输入都建有一个缓冲区即输入缓冲区。每次输入过程是这样的当一次键盘输入结束时会将输入的数据存入输入缓冲区而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的所以有时候当缓冲区中有残留数据时cin函数会直接取得这些残留数据而不会请求键盘输入。比如下面的例子123456789void test_input(){string str;coutcinstr;coutcinstr;cout}由于cin在遇到空格时就会停止输入所以如果我在第一次输入时利用空格隔开两个字符串那么cin在第一次取的时候只会读取前一个字符串到空格结束此时缓冲区还保留着前面输入的第二个字符串那么第二次cin就会直接从缓冲区取残留数据而不会请求输入。当然对于以上的情况也有解决的方案那就是在第二次调用cinstr之前通过cin.sync()来清空输入缓冲区看一下下面的例子此处不赘述12345678910void test_input(){string str;coutcinstr;cin.sync();coutcinstr;cout}各种输入方法简介1、cin根据cinsth 中sth的变量类型读取数据这里变量类型可以为intfloat,char,char*,string等诸多类型。这一输入操作在遇到结束符(Space、Tab、Enter)就结束且对于结束符并不保存到sth中。12345678910void test_input(){char ch1[10],ch2[10];coutcinch1;cinch2;coutcoutcout}2、cin.get(字符数组名接收长度结束符)其中结束符意味着遇到该符号结束字符串读取,默认为ENTER读取的字符个数最多为(长度-1)因为最后一个为”n”。要注意的是cin.get()操作遇到结束符停止读取但并不会将结束符从缓冲区丢弃。cin.get()有如下几种用法(1)接收一个字符chcin.get()或cin.get(char ch),二者等价看两个例子123456789void test_input(){char ch1,ch2;coutcin.get(ch1);//或ch1 cin.get();cin.get(ch2);coutcout}来看几组测试连续输入ab[enter]结果正常ch1,ch2分别读取了a、b将其输出然后在输出其ASCII值。要注意的是以上输入并读取后缓冲区中依然存在[Enter]没有被删除。输入a[Space]b[Enter]结果在输出时只看到了a输出ASCII值时候分别为97 32(空格的ASCII值)这就说明cin.get()并不会舍弃Space依然会将其读取进去并加以显示等操作。输入a[Enter],输出见下图。在输出a之后第二次的输出产生了换行的效果而输出的第二个ASCII值为10(Enter的ASCII值)这就进一步响应了前面说到的cin.get()遇到结束符并不会将之删除。(2)接收一定长度的字符串cin.get(字符数组名接收长度结束符)结束符为可选参数默认为Enter可以接受Space 、Tab对于结束符的处理要注意结束符并不会丢掉同样看几个例子。对于如下代码所做的操作时在不遇到enter时最多读入(6-1)5个字符到ch2中然后读入下一个字符到ch1中显示ch2ch1以及其ASCII码值。附上几组测试123456789void test_input(){char ch1,ch2[10];coutcin.get(ch2,6);//在不遇到结束符的情况下最多可接收6-15个字符到ch2中注意结束符为默认Entercin.get(ch1);//或ch1 cin.get();coutcout}输入zifuchuan[Enter]由于输入长度大于(6-1)5所以会首先读入“zifuc”到ch1此时“huan”仍在缓冲区当执行cin.get(ch1)会直接从缓冲区读入h而不需要申请从键盘输入看一下结果符合分析。输入zifu[Enter]此时输入长度小于5就遇到了默认结束符Enter则ch2中只读入“zifu”要注意的是输入缓冲区里面的Enter还在所以接下来要读入的ch1的内容将是Enter而输出时将看到换行ASCII码值为10见下图输入zi fuchuan[Enter]注意中间的空格cin.get()对空格并不敏感依然会读入故而ch2读入的是“zi fu”ch1读入的是c(3)cin.get( )注意此时没有参数可用于舍弃输入流中的不需要的字符,或者舍弃回车,弥补cin.get(字符数组名,字符数目,结束符)的不足。对(2)中的代码加入一句话cin.get()如下12345678910void test_input(){char ch1,ch2[10];coutcin.get(ch2,6);//在不遇到结束符的情况下最多可接收6-15个字符到ch2中cin.get();//注意前面两句可以写到一块cin.get(ch2,6).get();cin.get(ch1);//或ch1 cin.get();coutcout}前面遇到的一个状况是输入字符后其结束符(如默认的Enter)会保留在缓冲区中当下次读入时又会再读入此时就可以用到cin.get()独钓输入缓冲区不需要的字符如输入zi[Enter]由于遇到结束符所以ch2内容为zi此时输入缓冲区还存在着[Enter]但cin.get()将其舍弃掉之后cin.get(ch1)就会申请从键盘输入内容如下所示3、cin.getline(字符数组名接收长度结束符)其用法与cin.get(字符数组名接收长度结束符)极为类似。cin.get()当输入的字符串超长时不会引起cin函数的错误后面若有cin操作会继续执行只是直接从缓冲区中取数据。但是cin.getline()当输入超长时会引起cin函数的错误后面的cin操作将不再执行。如下代码123456789void test_input(){char ch1,ch2[10];coutcin.getline(ch2,6);//在不遇到结束符的情况下最多可接收6-15个字符到ch2中cinch1;coutcout}测试如下图输入zifuchuan[Enter]长度大于最大长度5就会导致cin函数错误其后既没有像cin.get()一样直接从输入缓冲区直接读数据也没有从键盘输入。所以此处可以注意考虑在用cin.getline()时适度设置其最大接受长度大一点。4、getline(istream is,string str,结束符)同样此处结束符为可选参数(默认依然为Enter)。然而getline()与前面的诸多存在的差别在于它string库函数下而非前面的istream流所有调用前要在前面加入#include。与之对应这一方法读入时第二个参数为string类型而不再是char*要注意区别。另外该方法也不是遇到空格就结束输入的。1234567void test_input(){string str;coutgetline(cin,str,a);cout}通过以上第二个图还可以看出这一方法只有在遇到结束符(此处为‘a’)才结束对空格甚至回车都不敏感。5、gets(char *ch)gets()方法同样接受一个字符串但是与getline()不同它的参数为char*而不是string另外若定义char ch[n]长度为n则样注意输入的字符串长度不要大于n否则会报错。同样gets()对空格也不敏感。1234567void test_input(){char ch[10];coutgets(ch);cout}好吧就到这里吧其实还有getchar()、getch()等这里就不一一赘述了。现在有很多小伙伴在自学但是一个人的能力总是有限的遇到问题没人帮你解决平时提供大家一起学习C每天免费C课程知识讲解。我们有一个C的学习交流qq群点击链接加入群【https://jq.qq.com/?_wv1027k424tWQd】学习返回搜狐查看更多责任编辑