条件为真时退出内循环

时间:2013-11-20 10:40:39

标签: c for-loop

我有两个10个数字的数组,包含0到1之间的随机浮点数。假设a[10]b[10]。我现在使用第一个c循环在变量for中生成0到1之间的随机浮点数,然后在第二个for循环中将其与'b'进行比较。< / p>

当条件为真时,第二个for循环应该停止并返回到前一个for循环以生成下一个随机数。问题是我尝试了几种方法(如果条件为真,则将k增加到最大限制或break函数或goto函数在条件为真时退出第二for循环但没有它们工作正常,有时会给我一个垃圾值。

很明显,随机数在某些点会小于或等于'b',因为两者的数字都在0到1之间。

int d;
float e[10];
a={0.3,0.9,1,0.2,0.11,0.21,0.43,0.64,0.55,0.88};

b={0.4,0.7,0.78,0.11,0.49,0.2,0.13,0.74,0.65,0.98};

for (int j=0; j<10; j++) //first for loop for generating random number
    {

        float c=(float)rand()/((float)RAND_MAX);
        for (k=0; k<10; k++) // 2nd for loop for comparison with generated number
        {
            if (c<=b)
            {
                d=k;
                e[k]=a[d];
                printf("%f\n",e);
                k=10;   
                //goto jmp;
                            //break;
            }
        }
        //jmp: printf("\n");
    }  

3 个答案:

答案 0 :(得分:1)

我认为这种情况是错误的:

if (c<=b)

因为你的变量声明是:

float c;
float b[10] = {....};

所以你可能想做类似

的事情
   if (c<=b[0])
   {
     ....
     break;
   }

答案 1 :(得分:0)

您对10 a的数组bfloat的声明

  a={0.3,0.9,1,0.2,0.11,0.21,0.43,0.64,0.55,0.88};

  b={0.4,0.7,0.78,0.11,0.49,0.2,0.13,0.74,0.65,0.98};   

错了(特别是在C中)。将其更改为

 float a[10]={0.3,0.9,1,0.2,0.11,0.21,0.43,0.64,0.55,0.88};

 float b[10]={0.4,0.7,0.78,0.11,0.49,0.2,0.13,0.74,0.65,0.98};  

现在你不能if (c<=b)bfloat的数组,cfloat类型。在C.中,没有这样的比较是可能的 我想你想这样做

if (c<=b[j]) 
{   
    ....
    printf("%f\n",e[k]);
    ....
}

答案 2 :(得分:0)

通过提及数组的名称(在您的情况下为e),它将为您提供地址。 (在某些情况下,数组会衰减到指针)

您必须使用e [k]打印浮点值。

if (c<=b[j])// Here, I have changed it
{        ^-- error was here
    ...
    ...
    printf("%f\n",e[k]);// Here, I have changed it
                  ^-- error was here