2013-11-20 3 views
1

У меня есть два массива из 10 чисел, содержащих случайные плавающие числа от 0 до 1. Предположим, что a[10] и b[10]. Теперь я генерирую случайное число с плавающей запятой между 0 и 1 в переменной c, используя первый цикл for, а затем сравнивая его с 'b' во втором цикле for.Выход из внутреннего цикла, когда условие истинно

Когда условие истинно, цикл 2 for должен остановиться и вернуться к предыдущему циклу for, чтобы сгенерировать следующее случайное число. Проблема заключается в том, что я пробовал несколько методов (увеличение k до максимального предела в условии if или break или функция goto для выхода из цикла, когда условие истинно, но ни один из них не работает правильно и иногда дает мне значение для мусора.

очевидно, что случайное число будет меньше или равно «Ъ» в некоторых точках, поскольку оба имеют номера в диапазоне от 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 указателя на 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

Ваша декларация для массива a и с

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 - это массив float и c - тип float. Никакое сравнение, как это не возможно в 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), это даст вам адрес. (Array's в некоторых случаях распадается на указатели)

Вы должны использовать 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: Да, я исправил его ... –

Смежные вопросы