2016-12-01 2 views
0

Вот набор разрешение экрана, который я хочу, чтобы проверить в паре, когда вводимые пользователем вКак проверить действительное разрешение экрана (в C/C++)

Aspect ratio - 4:3 
800 x 600 
1024 x 768 
1152 x 864 
1280 x 960 
etc.. 

В настоящее время здесь то, что я имею в виду:.

int arrWidth[] = {800, 1024, 1152, 1280}; 
int arrHeight[] = {600, 768, 864, 960}; 
for (int i = 0; i < sizeof(arrWidth)/sizeof(arrWidth[0]); ++i) { 
    if (pInputWidth == arrWidth[i]) { 
     if (pInputHeight == arrHeight[i]) { 
      // both width and height is good 
      return true; 
     } 
     // width good, but height doesn't match 
     return false; 
    } 
} 
// width doesn't match at all 
return false; 

Есть ли лучший способ сделать это?

+2

Конечно, есть лучший способ: показанный код полностью сломан, и единственная причина, по которой он работает для вас, состоит в том, что ваш 'sizeof (int *)' равен 4. Будьте готовы к тому, что ваш код умрет огненной смертью, когда он скомпилирован для 64-битной платформы. Подсказка: 'sizeof (arrWidth)' не делает того, что вы думаете. –

+0

yep, мой плохой, отредактированный. –

+1

Выглядит лучше, но лучшим местом для этого вопроса будет http://codereview.stackexchange.com/ –

ответ

2

Если вы просто хотите проверить, какие разрешения соответствуют данному коэффициенту, вы можете просто перемножить разрешения и проверить, равны ли они. Вот короткий пример:

#include <stdio.h> 

int main (void) { 

    int ar[] = {4, 3}, 
     aw[] = {800, 1024, 1152, 1280, 1280}, 
     ah[] = {600, 768, 864, 960, 1024}, 
     n = sizeof aw/sizeof *aw; 

    for (int i = 0; i < n; i++) 
     if (ar[0] * ah[i] == ar[1] * aw[i]) /* simple cross-comparison */ 
      printf (" resolution OK : %4d x %d\n", aw[i], ah[i]); 

    return 0; 
} 

Пример использования/выход

$ ./bin/resolution 
resolution OK : 800 x 600 
resolution OK : 1024 x 768 
resolution OK : 1152 x 864 
resolution OK : 1280 x 960 

1280 x 1024 Разрешение не показан, поскольку он не 4:3. Если я упустил намерение вашего вопроса, просто дайте мне знать. Если возможно, оставайтесь с целым сравнением, чтобы избежать некоторых ошибок с равенством с плавающей запятой.

+0

, что близко к тому, что я ищу, cross multiply может помочь мне удалить цикл for и 2 массив в моем вопросе и сделать это быстрее. Просто нужно иметь нижнюю/верхнюю границу для ширины и высоты, поэтому будет хорошо идти –

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