2013-11-20 66 views
1

我有兩個包含0到1之間隨機浮動數字的10個數字的數組。假設a[10]b[10]。我現在使用第一個for循環在變量c中生成介於0和1之間的隨機浮點數,然後在第二個for循環中將其與'b'進行比較。條件爲真時退出內環

當條件成立時,第二個for循環應該停止並返回前一個for循環以生成下一個隨機數。問題是我已經嘗試了幾種方法(在條件爲012時提高k到最大限制或break函數或goto函數從條件爲true時退出第二個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"); 
    } 
+0

你可以使用2個不同的樂趣指針而不是這個,它的寫和處理並不複雜,更「功能性」。 – user2485710

+1

你是不是指'e [j] = a [k]'? –

+0

if(c <= b)這可能是錯誤的 – Joze

回答

1

我認爲這種情況是錯誤的:

if (c<=b) 

因爲你的變量聲明爲:

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

那麼可能是你想要做這樣的事情

if (c<=b[0]) 
    { 
    .... 
    break; 
    } 
+0

他可能不想反覆比較只有數組的第一個元素,不。 –

0

你的聲明的10 float陣列ab s

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)b是數組floatcfloat類型。像這樣沒有比較有可能在C.
我想你想做到這一點

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

c不是數組。 – Joze

+0

@Joze;編輯:)。 – haccks

+0

'(float)rand()%((float)RAND_MAX);'會產生一個幾乎總是大於'1'的值。 – ajcaruana

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 
+1

if(c <= b)也是一個錯誤 – Joze

+0

@Joze:是的,我糾正了它...... – 2013-11-20 10:50:52