这样做有效吗?(c,c+;+;,java)

这样做有效吗?(c,c+;+;,java),java,c++,c,while-loop,do-while,Java,C++,C,While Loop,Do While,上面的代码来自arduino,但我在这里发布,因为这不是关于arduino的问题,而是关于用C风格语言编程的问题 我想成功访问Serial.print()部分。我设置了一个do-while循环,以确保该循环持续运行 现在,我的问题是,这有效吗? 我的目的是一直运行,直到gps.location.isValid()返回true。但是gps.location.isValid()是在do while循环中计算的,我还将其作为do while循环的一个条件 我的意思是,虽然(gps.location.i

上面的代码来自arduino,但我在这里发布,因为这不是关于arduino的问题,而是关于用C风格语言编程的问题

我想成功访问Serial.print()部分。我设置了一个do-while循环,以确保该循环持续运行

现在,我的问题是,这有效吗? 我的目的是一直运行,直到gps.location.isValid()返回true。但是gps.location.isValid()是在do while循环中计算的,我还将其作为do while循环的一个条件

我的意思是,虽然(gps.location.isValid());将尝试重新计算此函数,或者如果循环中的函数返回true,那么该值将被“记住”,因此我将退出循环

或者,即使它在循环中成功返回true,while(gps.location.isValid());是否将尝试重新运行此函数,或者它将记住它以前是否已通过

我的目标是当gps.location.isValid()返回true时,执行以下命令并退出。不要尝试计算并运行它两次(一次在循环中,一次在条件中)

因为在我的程序中,它永远不会通过两次,因此它将永远运行。我想传递它一次,执行两条语句并结束。

以下是一种方法:

void loop()
{
    if (button || tilt)
    {
        do
        {  
            while (ss.available()>0)
            {
                char c = byte(ss.read());
                if (gps.encode(c)) 
                {    
                    if (gps.location.isValid()) //I want this to run until this function is true 
                    {
                        Serial.print(gps.location.lat(), 6); 
                        Serial.print(gps.location.lng(), 6); 
                    }
                }   
             }
        } while (gps.location.isValid());
    }
}
void循环()
{
如果(按钮| |倾斜)
{
bool isGpsLocationValid=false;
而(!isGpsLocationValid)
{

虽然(ss.available())你看起来很困惑,但我建议你休息1/2-1天,你自己会做好的:)我是说真的。如果
ss.available()==0,即使
gps.location.isValid(),这也会终止
仍然是
false
。T.C是正确的。如果ss.available==0,我想重试循环。我想重试,直到我确定通过了gps.location.isValid()。另外,在我的第一个示例中,是两次计算的gps.location.isValid(),或者只计算了一次。@user1584421查看更新的代码。
void loop()
{
    if (button || tilt)
    {
        bool isGpsLocationValid = false;
        while (!isGpsLocationValid)
            {
                while(ss.available()<=0)
                {
                    Thread.sleep(1000); // wait for 1 sec
                }
                char c = byte(ss.read());
                if (gps.encode(c)) 
                {    
                    if (gps.location.isValid())  
                    {
                        Serial.print(gps.location.lat(), 6); 
                        Serial.print(gps.location.lng(), 6); 

                        isGpsLocationValid = true;
                    }
                }   
             }

    }
}