C++ ing(s),s.len()>5)更好。read_string()就是一个例子,我的意思是准备条件所需的任何操作。它可能会返回true、false、0、1或void…read\u string应该返回读取的字节,并且您已经完成了while(read\u s
C++ ing(s),s.len()>5)更好。read_string()就是一个例子,我的意思是准备条件所需的任何操作。它可能会返回true、false、0、1或void…read\u string应该返回读取的字节,并且您已经完成了while(read\u s,c++,c,while-loop,break,comma-operator,C++,C,While Loop,Break,Comma Operator,ing(s),s.len()>5)更好。read_string()就是一个例子,我的意思是准备条件所需的任何操作。它可能会返回true、false、0、1或void…read\u string应该返回读取的字节,并且您已经完成了while(read\u string)>5。在我看来,这是最好的设计:整个问题都存在,因为read\u string在我看来设计得很糟糕。@Michael,很难为一个假设的用例想出一个通用的解决方案。我认为如果做准备工作的函数返回一个状态,这是一个更好的设计。@Mich
ing(s),s.len()>5)更好。read_string()就是一个例子,我的意思是准备条件所需的任何操作。它可能会返回true、false、0、1或void…
read\u string
应该返回读取的字节,并且您已经完成了while(read\u string)>5
。在我看来,这是最好的设计:整个问题都存在,因为read\u string
在我看来设计得很糟糕。@Michael,很难为一个假设的用例想出一个通用的解决方案。我认为如果做准备工作的函数返回一个状态,这是一个更好的设计。@Michaelread\u string
不应该是一个无效函数。如果您正在执行读取操作,则应返回bool,以便判断读取是否成功。如果read\u string
返回void
,则while(read\u string,s.len()>5)
更好。read\u string()就是一个示例,我的意思是需要执行任何操作来准备条件。它可能会返回true、false、0、1或void…read\u string
应该返回读取的字节,并且您已经完成了while(read\u string)>5
。在我看来,这是最好的设计:整个问题都存在,因为read\u string
在我看来设计得很糟糕。@Michael,很难为一个假设的用例想出一个通用的解决方案。我认为如果做准备工作的函数返回一个状态,这是一个更好的设计。
string s;
while(1) // this looks like trouble
{
read_string(s);
if(s.len() > 5) break; // hmmm, where else might this loop exit
//do something
}
string s;
while( read_string(s), s.len() > 5 )
{
//do something
}
string s;
while( read_string(s) && s.len() > 5 )
{
//do something
}
template <size_t min>
class MinString{
std::string data;
public:
friend std::istream &operator>>(std::istream &is, MinString &m) {
std::string s;
read_string(is, s); // rewrite read_string to take an istream & as a parameter
if (s.length() >= min)
m.data = s;
else
is.setstate(std::ios::failbit);
return is;
}
operator std::string() { return data; }
// depending on needs, maybe more here such as assignment operator
// and/or ctor that enforce the same minimum length requirement
};
Minstring<5> s;
while (infile >> s)
process(s);
bool read_string_min(std::string &s, size_t min_len) {
read_string(s);
return s.length() >= min_len;
}
while (read_string_min(s, 5))
process(s);
while (read_string(s) > 5)
process(s);