C++ 如何验证有效的屏幕分辨率(在C/C+;+;)

C++ 如何验证有效的屏幕分辨率(在C/C+;+;),c++,c,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)

这是一组屏幕分辨率,我想在用户输入时成对验证

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;
intarrwidth[]={800102411521280};
int arrhight[]={600768864960};
对于(int i=0;i

有更好的方法吗?

如果您只是想验证哪些分辨率与给定的比率匹配,您可以简单地交叉乘以分辨率并测试它们是否相等。下面是一个简短的例子:

#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;
}

未显示
1280 x 1024
分辨率,因为它不是
4:3
。如果我没有理解你问题的意图,请告诉我。如果可能的话,保持整数比较,以避免一些浮点相等的问题。

如果您只是想验证哪些分辨率与给定的比率匹配,您可以简单地交叉乘以分辨率并测试它们是否相等。下面是一个简短的例子:

#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;
}

未显示
1280 x 1024
分辨率,因为它不是
4:3
。如果我没有理解你问题的意图,请告诉我。如果可能的话,请使用整数比较来避免一些浮点相等的问题。

当然有更好的方法:显示的代码完全被破坏了,它对您有效的唯一原因是因为您的
sizeof(int*)
是4。当您的代码为64位平台编译时,请做好准备,让它火冒三丈。提示:
sizeof(arrWidth)
不符合您的想法。是的,我的错,已编辑。看起来更好,但这个问题的更好位置是@MrEricSir:这是一个非常糟糕的主意,因为结果永远都不准确。如果你做相反的除法,它将是精确的,但是你可以乘:
If(4*height==3*width).
检查4:3的比率(见上文)和
width>=320&&width当然有更好的方法:显示的代码完全被破坏了,它对你有效的唯一原因是因为
sizeof(int*)
是4。当您的代码为64位平台编译时,请做好准备,让它火冒三丈。提示:
sizeof(arrWidth)
不符合您的想法。是的,我的错,已编辑。看起来更好,但这个问题的更好位置是@MrEricSir:这是一个非常糟糕的主意,因为结果永远都不准确。如果你做相反的除法,它将是精确的,但是你可以乘法:
If(4*height==3*width).
检查4:3的比率(见上文)和
width>=320&&width这与我想要的接近,交叉乘法可以帮助我删除问题中的for循环和2数组,并使它更快。只需要有宽度和高度的低/高边界,这样就可以很好地接近我所寻找的,交叉乘法可以帮助我删除问题中的for循环和2数组,并使其更快。只需要在宽度和高度上有一个低/高边界,这样就很好了