《c中getline的用法.docx》由会员分享,可在线阅读,更多相关《c中getline的用法.docx(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、c中getline的用法c中getline的用法下面我就跟你们具体介绍下c中getline的用法的用法,希望对你们有用。c中getline的用法的用法如下:getline函数是一个比拟常见的函数。根据它的名字我们就能够知道这个函数是来完成读入一行数据的。如今对getline函数进行一个总结。在标准C语言中,getline函数是不存在的。下面是一个简单的实现方式:复制代码intgetline_(chars,intlim)intc,i;i=0;while(c=getchar()!=EOFc!=nilim-1)si+=c;si=0returni;复制代码下面是一个简单的测试程序:复制代码inttes
2、t1()chars100;intlen;while(len=getline_(s,100)0)printf(%sn,s);return0;复制代码但是这个实现是有问题的,就是碰到空行的时候也会停止的。为了解决这个问题,我们需要重新考虑while循环的判定条件。在上面的实现中,我们是碰到EOF和换行n的时候都停止,然后通过判定所读到的字符串的长度能否大于0来判定能否结束。为了能读入空行,我们需要判定一下能否读入的是结尾EOF,假如不是就继续读取就能够了。还有一点,EOF是什么?EOF是C语言中为了区分有效数据和输入结束符的。C语言采用的解决办法是:在没有输入时getchar函数将返回一个特殊值,
3、这个特殊值与任何实际字符都不同。这个值成为EOFendoffile,文件结束。我们在声明变量c的时候,必须让它大到足以存放getchar函数返回的任何值。之所以不把c声明成char类型,是由于它必须足够大,除了能存储任何可能的字符外还要能存储文件结束符EOF。EOF的输入由系统锁定。windows下是ctrl+z,linux/unix下是ctrl+d。下面是给出的修改后的getline函数复制代码intgetline2_(chars,intlim)intc,i;i=0;while(c=getchar()!=EOFc!=nilim-1)si+=c;if(c=EOFi=0)return-1;si=
4、0returni;复制代码假如是文件结尾(c=EOFi=0)的话,我们就返回-1,通过判定返回值能否为-1来决定能否继续入输入:复制代码inttest1()chars100;intlen;while(len=getline2_(s,100)!=-1)printf(%sn,s);return0;复制代码这样话就能够正确读入所有的输入了。在gcc编译器中,对标准库进行了扩展,参加了一个getline函数。该函数的定义如下:#includestdio.hssize_tgetline(char*lineptr,size_t*n,FILE*stream);其中*lineptr指向一个动态分配的内存区域。
5、*n是所分配内存的长度。假如*lineptr是NULL的话,getline函数会自动进行动态内存的分配忽略*n的大小,所以使用这个函数非常注意的就使用要注意本人进行内存的释放。假如*lineptr分配了内存,但在使用经过中发现所分配的内存缺乏的话,getline函数会调用realloc函数来重新进行内存的分配,同时更新*lineptr和*n。注意*lineptr指向的是一个动态分配的内存,由malloc,calloc或realloc分配的,不能是静态分配的数组。下面是使用这个函数情况,事先分配了动态内存。复制代码voidtest2()intread;intlen=100;char*line=N
6、ULL;if(line=malloc(len+1)=NULL)printf(Cantgetmemorynexit(-1);while(read=getline(line,len,stdin)!=-1)printf(%sn,line);free(line);复制代码下面是一个没有提早进行内存分配的情况:复制代码voidtest3()intread;intlen=0;char*line=NULL;while(read=getline(line,len,stdin)!=-1)printf(%sn,line);free(line);复制代码同样最后要进行内存的释放。这儿还要注意一个问题就是,getli
7、ne函数读入的一行是包括最后的换行符的。之前我们写的函数是不包括这个的。下面我们进行修改一下,也读入换行符。复制代码intgetline3_(chars,intlim)intc,i;i=0;while(c=getchar()!=EOFc!=nilim-1)si+=c;if(c=EOFi=0)return-1;if(c=n)si+=c;si=0returni;复制代码这样也读入了换行符。这样的话,这个getline函数就不错了。在C+中为了使用的方便,C+在标准库中添加了getline函数。其实在C+中对不同的输入流对象都定义了一个getline函数,即:std:fstream:getlines
8、td:istream:getlinestd:ifstream:getlinestd:iostream:getlinestd:wfstream:getlinestd:wistream:getlinestd:wifstream:getlinestd:wiostream:getlinestd:stringstream:getlinestd:basic_fstream:getlinestd:basic_istream:getlinestd:istringstream:getlinestd:wstringstream:getlinestd:basic_ifstream:getlinestd:basic_
9、iostream:getlinestd:wistringstream:getlinestd:basic_stringstream:getlinestd:basic_istringstream:getline这儿我们讨论标准输入对象的getline函数,其他的对象的情都是类似的。在头文件iostream中声明了getline函数:istream:getlineistreamgetline(char*s,streamsizen);istreamgetline(char*s,streamsizen,chardelim);函数是C类型的数组。由于C+中允许对函数进行重载,所以能够有多个同名函数。del
10、im参数是指定分隔符。假如不指定的话,默认使用n下面是一个例子:voidtest1()charline100;while(cin.getline(line,100)coutlineendl;注意这儿的getline是要读入空白符。但是不包括最后的换行符。C+中还定义了一个在std名字空间的全局函数,由于这个getline函数的参数使用了string字符串,所以声明在了string头文件中了。声明如下:istreamgetline(istreamis,stringstr,chardelim);istreamgetline(istreamis,stringstr);简单的示例如下:voidtest2()stringline;while(getline(cin,line)coutlineendl;注意此处也是不读入换行符的。所以在C+中读取一行的函数是不读入换行符的,而GCC中getline函数是读入换行符的。能够理解为,一般情况下不读入,十分的是GCC的读入。c中getline的用法下面我就跟你们具体介绍下c中getline的用法的用法,希望对你们有用。c中getline的用法的用法如下:getline函数是一个比拟常见的函数。根据它的名字我们就能够知道这个函数是来完成读入一行数据的。如今对getline函数进行一个总结。推荐度: