2014-01-14 6 views
-1

Мне интересно, как лучше всего подойти к этой проблеме. У меня есть функция рандомизации, которая принимает 8 строк в качестве входных данных и выводит случайный из них. Я хотел бы, чтобы этот рандомизатор игнорировал все строки, которые не имеют значения. Например, если у меня есть текст текста #, где # - 1-8, и, скажем, text5 и text7 не имеют текста, тогда я хочу, чтобы функция рандомизации проверяла, использует ли какой-либо текст только текст #, где # равно 1-8 но не 5 или 7.Как упростить обширный оператор C if?

+0

Берегись для случая, когда все 8 из них являются пустыми. –

+1

Покажите нам код – ericbn

+0

Вы пишете программное обеспечение для такого рода вещей. Что вы пробовали? –

ответ

0

Yikes! Поместите строки в массив вместо 8 разных переменных. Затем используйте цикл for.

-1
  1. Поместите строки в массив

  2. Выберите случайный индекс в массиве, используя вашу случайную функцию

  3. Используйте код, подобный:

 
    int i; 
    for (i = index; i != index; i = (i+1) % numitems) 
    { 
     /* check we have a string and it isn't empty */ 
     if (strings[i] && *strings[i]) 
      return strings[i]; 
    } 
    return NULL; 

при условии, что index - ваше случайное число от 0 до numitems -1.

0
  1. Подсчитайте список допустимых строк.
  2. Форма случайного числа (rand() % Count).
  3. Найдите подходящую строку.

Пример кода

int StringCount = 8; 
char *String[StringCount]; 

// populate `Sting` somehow 

// count valid strings 
int Count = 0; 
for (int i=0; i<StringCount; i++) { 
    if (ValidString(String[i])) Count++; 
} 

if (Count == 0) Handle_NoGoodStrings(); 
int random_number = rand()%Count; 

int i; 
for (i=0; i<StringCount; i++) { 
    if (ValidString(String[i])) { 
    if (Count == random_number) { 
     break; 
    } 
    } 
} 

// String[i] is the string 
Смежные вопросы