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,很难为一个假设的用例想出一个通用的解决方案。我认为如果做准备工作的函数返回一个状态,这是一个更好的设计。@Michael
read\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);