2011-11-19 16 views
10

Birden çok öğeyi nasıl karşılaştırabilirim? Örneğin, A, B ve C değişkenlerinin tümü 'X' harfine eşit mi yoksa üçünün de 'O' değerine eşit olup olmadığını kontrol etmek isterim. (2 tanesi X ve varsa yanlış dönmelidir O biridir.) DenedimBirden çok değişkenin aynı değere eşit olup olmadığını nasıl kontrol edebilirim?

:

if (A, B, C == 'X' || A, B, C == 'O') 
    { 
    //Do whatever 
    } 

ama işe yaramadı. Bunu yapmanın en iyi yolu nedir?

+0

, B, C değişkenleri? Sadece – Kos

+0

soruyorum bir değişken kullanıyorum. A, B, C ile demek istiyorum: myArray [0], myArray [1], myArray [2]. –

+1

Aşağıdaki cevabın dışında başka bir yolun olmadığı ya da sadece tek tek test edilmesi gibi görünüyor. Sağolun. –

cevap

14
if((A == 'X' || A == 'O') && A == B && B == C) 
{ 
    // Do whatever 
} 
+2

neden basit bir şeyi karmaşıklaştırıyor? – Kos

+0

@Kos: neden benim karmaşık ve neden basit bir şey? – Dani

+0

@Kos ile aynı fikirdeyim - bu, diğer programcıların tam olarak ne yaptığınızı anlamasını kolaylaştırmak için genişletilmiş form olarak yazılmalıdır. Derleyiciler, bu boole koşullarını her zamankinden daha iyi optimize eder. –

1

Sadece onları ayırmak ve onları tek tek test eder: Sadece çeşitli

if (A == 'O' && B == 'O' && C == 'O' || A == 'X' && B == 'X' && C == 'X') 
    // etc 
+0

Buraya '()' eklemelisiniz ya da temel olarak tek tek ve iki grubun ayrı ayrı test edilmesini değil, ya da “ya” mesajını vermelisiniz. – Dani

+0

@Dani Sana inanıyorum ama nedenini açıklayacak mısın? Operatörler azalan öncelik sırasına göre sırasıyla '==' ve '&&' '' '' 'dır, değil mi? Bu, tüm '==' ilk önce yapıldıktan sonra '&' ', sonra' || 'anlamına gelmez mi? Ve bu doğru değil mi? –

+0

nope, '&&' ve '||' aynı önceliğe sahiptir, bu yüzden ilk önce '==' olur, sonra 2 '&&' '' '' 've sonra son' && – Dani

11

: yerine A'nın bir dizi ile daha iyi olmaz, BTW

template <typename T, typename U> 
bool allequal(const T &t, const U &u) { 
    return t == u; 
} 

template <typename T, typename U, typename... Others> 
bool allequal(const T &t, const U &u, Others const &... args) { 
    return (t == u) && allequal(u, args...); 
} 

if (allequal(a,b,c,'X') || allequal(a,b,c,'O')) { ... } 
+0

Teşekkürler çok! Bunu başarmak için bana bir işlev yapma fikri verdin! –

+1

Bunu seviyorum C++ 11'den aksesuarlar. –

İlgili konular