2016-12-26 6 views
-2

У меня есть массив structs, который заполнен некоторыми значениями. Я предлагаю пользователю ввести значение. Затем мне нужно проверить массив, чтобы узнать, содержится ли в нем значение, введенное пользователем.
Если он найден, программа продолжит выполнение.
Если он не найден, программа предложит пользователю ввести другое значение.Как сравнить с несколькими значениями в состоянии цикла while

Ниже приведен код, который я уже написал. Вы можете видеть, что я пытался проверять массив как часть условия цикла while-while, но это не работает.

do 
{ 
    printf("Insert the number you want to search:\n"); 
    numero = getInputFromUser(); 
} while (for (i = 0; i < numAlunos; i++) // This is where I need help 
      numero != vAlunos[i].numero) 

Как сканировать массив как часть условия цикла?

+2

Написать новую функцию, которая будет выполнять тыс e искать и возвращать, было ли это найдено или нет. Затем вы можете использовать эту функцию в своем состоянии цикла while. – pstrjds

+0

Я попытался изменить ваш вопрос и очистить код, который был там, чтобы сосредоточить внимание на проблеме, о которой вы говорили. Если я не очистил его правильно, не стесняйтесь редактировать его дальше или развернуть то, что я сделал. – pstrjds

ответ

2

Если вы используете C99, то у вас есть доступ к stdbool.h и вы можете использовать булевский тип, если это не так, просто скорректируйте это в соответствии с тем, что вы используете в качестве замены bool, например, typedef, #define или просто верните 0 и 1 с помощью int.

Я также предполагаю, что ваш массив структур и переменная длины массива являются глобальными, но если это не так, вы можете просто изменить эту функцию, чтобы передать их в качестве аргументов.

bool checkForValue(int numeroToSearch) // Guessing int, but change as needed 
{ 
    int i; 
    for (i = 0; i < numAlunos; i++) 
    { 
     if(numeroToSearch == vAlunos[i].numero) 
     { 
      return true; 
     } 
    } 
    return false; 
} 

Тогда вы должны быть в состоянии использовать его как это:

do 
{ 
    printf("Insert the number you want to search:\n"); 
    number= validar_insert (2150001, 2169999);//check if the input is between this values 

    printf("That number doeste exist.\n"); 
    printf("Enter another number.\n"); 
}while (!checkForValue(numero)) 
+0

Я получаю все, что вы сказали, кроме как на вещи: как я могу получить «numeroToSearch», чтобы использовать его в функции checkForValue? Я должен был бы вернуть его из функции, где используется цикл, не так ли? I –

+0

@NelsonSilva - Вы передаете его функции. Если вы посмотрите на код цикла do-while, который я разместил, вы видите, что я перехожу в 'numero'. Я просто назвал его 'numeroToSearch' в функции, чтобы было ясно, что это было. Цикл do-while, который я добавил, берется непосредственно из вашего примера кода, единственное, что я сделал, это взять цикл for, который вы указали в состоянии do-while, и переместить его в функцию, которую я тогда вызвал из условия до-пока. – pstrjds

1

Если вы не возражаете, используя расширение компилятора, как GCC и Clang обеспечивают statement-expressions, которые могут быть встроены в состоянии:

do { 
    printf("Insert the number you want to search:\n"); 
    numero = getInputFromUser(); 
} while (({ 
    int i = 0; 

    while(i < numAlunos && vAlunos[i] != numero) 
     ++i; 

    i == numAlunos; // "return value" of the statement-expressions 
})); 

See it live on Coliru

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