getline()函数

getline()函数会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成的此字符串结束。1)到文件结束,2)遇到函数的定界符,3)输入达到最大限度。
在函数遇到和结束定界符相等的字符时函数结束,同时函数抽出定界符,此种情况下该定界符既不被放回输入流,也不被放入要生成的字符串。所以由此可以理解输入结束后的第一个回车是定界符,被确认后抛弃,而第二个才是程序执行运行时正常需要的!

C++有getline()函数.
C 有 fgets(), gets() 函数,也有getline.
用于读取一行 字符直到换行符,包括换行符.

linux标准C中使用条件:
#define _GNU_SOURCE
  #include <stdio.h>
函数申明:
ssize_t getline(char **lineptr, size_t *n, FILE *stream);

成功:返回读取的字节数。
失败:返回-1。
参数:
lineptr:指向存放该行字符的指针,如果是NULL,则有系统帮助malloc,请在使用完成后free释放。
n:如果是由系统malloc的指针,请填0
stream:文件描述符

4应用举例


#define _GNU_SOURCE
  #include <stdio.h>
  #include <stdlib.h>
int main(void)
  {
  FILE * fp;
  char * line = NULL;
  size_t len = 0;
  ssize_t read;
fp = fopen("/etc/motd", "r");
  if (fp == NULL)
  exit(EXIT_FAILURE);
while ((read = getline(&line, &len, fp)) != -1)
{
  printf("Retrieved line of length %zu :\n", read);
  printf("%s", line);
  }
if (line)
  free(line);
  exit(EXIT_SUCCESS);
  }

与get函数的区别

#include <iostream>
using namespace std;
#include <iostream>
using namespace std;
int main( )
{
cout << "Type the letter 'a': ";
ws( cin );
char c[10]={'\0'};
cin.getline(c,10,'#');//将getline换成get试试,情况就大不相同了,呵呵
cout<<c<<endl;
char ch=cin.get();
cout<<"ch="<<ch;
if(ch=='\n')
{
cout<<"ch equals a new line operator "<<endl;
}
char ch2=cin.get();
cout<<"ch2= "<<ch2;
cin.get(c,10);
cout<<c<<endl;
cout<<cin.readsome(c,4)<<endl;
cout<<c<<endl;
cout << cin.gcount( ) << endl;
return 0;
}
//get(char*array,int count,char delim)与getline(char*array,int count,char delim)的不同点:
//1.当输入的字符数小于count时遇到字符delim,get函数不会读取delim这个字符,而getline函数将读取这个字符但是不存进array当中去,而是将
//其丢弃,当然,两者都会在读取的字符串后面自动加上'\0'(teminator character)
//2.当输入的字符数大于count时,则get函数只读取count-1个字符,而其余的字符仍然保存在缓冲区中,还可再对其进行读取;但是函数getline
//则不然,首先getline函数也会读取count-1个字符,但是它将剩余的字符数全都抛弃了,并且还刷新了缓冲区
//这是我的猜测,原因是当后面再对其进行读取操作时,如char ch=get(),则ch是一个莫名其妙的字符,估计是乱码
//故作此种猜测
//倘有哪位知道原因,敬请指出,谢谢!
外加ignore用法举例一则:
// basic_istream_ignore.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
using namespace std;
char chararray[10];
cout << "Type 'abcdef': ";
cin.ignore( 5, 'c' );//忽略前5个字符除非遇到字符'c',而停止忽略字符
//ignore的函数原型为:basic_istream& ignore(streamsize _Count = 1,int_type _Delim = traits_type::eof( ));(摘自MSDN)
cin >> chararray;
cout << chararray;
cout<<endl<<endl;
return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值