当前位置:编程学习 > C/C++ >>

cin.getline()与如何使循环终止(C++)

书上有这样一个例子
“输入第一行有一个整数T,表示测试数据的组数。接下来有T行,每一行是一个含有空格的字符串。”
const int MAXN=1000;
……
int T;
char str[MAXN];
cin>>T;
cin.getline(str,10);
while(cin.getline(str,MAXN))
{
处理关于str的信息;
}
看不懂是如何在输入T组测试数据后停止循环的,求指教
追问:那输入的T不就是没意义了吗,还有
const int MAXN=1000;
……
int T;
char str[MAXN];
cin>>T;
cin.getline(str,10);//吸收数据T所在行尾部的信息(这是注释)   为什么这么说呢
while(cin.getline(str,MAXN))
{
处理关于str的信息;
}
答案:先看看getline的定义:

_Myt& getline(_Elem *_Str,
streamsize _Count, _Elem _Delim)
{// get up to _Count characters into NTCS, discard _Delim
_DEBUG_POINTER(_Str);
ios_base::iostate _State = ios_base::goodbit;
_Chcount = 0;
const sentry _Ok(*this, true);


if (_Ok && 0 < _Count)
{// state okay, use facet to extract
int_type _Metadelim = _Traits::to_int_type(_Delim);


_TRY_IO_BEGIN
int_type _Meta = _Myios::rdbuf()->sgetc();


for (; ; _Meta = _Myios::rdbuf()->snextc())
if (_Traits::eq_int_type(_Traits::eof(), _Meta))
{// end of file, quit
_State |= ios_base::eofbit;
break;
}
else if (_Meta == _Metadelim)
{// got a delimiter, discard it and quit
++_Chcount;
_Myios::rdbuf()->sbumpc();
break;
}
else if (--_Count <= 0)
{// buffer full, quit
_State |= ios_base::failbit;
break;
}
else
{// got a character, add it to string
++_Chcount;
*_Str++ = _Traits::to_char_type(_Meta);
}
_CATCH_IO_END
}


*_Str = _Elem();// add terminating null character
_Myios::setstate(_Chcount == 0 ? _State | ios_base::failbit : _State);
return (*this);
}
可见,getline读入一字符串,返回其指针。如果读入空串时(比如不输入字符串,直接按回车),返回NULL。
while(cin.getline(str,MAXN))表示在输入空串时终止。

上一个:用visual c++ 编出的程序如何在别的电脑上运行
下一个:怎样配置NCSA Server来运行C++编译的CGI???

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,