2011-11-19 37 views
10

Làm cách nào để so sánh nhiều mục? Ví dụ, tôi muốn kiểm tra xem tất cả các biến A, B, và C bằng với char 'X' hay cả ba đều bằng 'O'. (Nếu 2 trong số đó là X và một là O nó sẽ trả về false.)Làm cách nào để kiểm tra xem nhiều biến có bằng cùng một giá trị không?

tôi đã cố gắng:

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

nhưng nó đã không làm việc. Cách tốt nhất để làm việc này là gì?

+0

BTW, bạn sẽ không được tốt hơn off với một mảng thay vì A, B, C biến? Chỉ cần hỏi – Kos

+0

Tôi đang sử dụng một biến. Bởi A, B, C, tôi có nghĩa là: myArray [0], myArray [1], myArray [2]. –

+1

Dường như không có cách nào khác ngoài việc làm điều này ngoài câu trả lời dưới đây hoặc chỉ đơn giản là thử nghiệm từng cái một. Cảm ơn bạn. –

Trả lời

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

tại sao lại phức tạp một điều đơn giản? – Kos

+0

@Kos: tại sao tôi phức tạp và tại sao nó lại là một điều đơn giản? – Dani

+0

Tôi đồng ý với @Kos - điều này sẽ được viết dưới dạng hình thức mở rộng để giúp các lập trình viên khác hiểu chính xác những gì bạn đang làm. Trình biên dịch tối ưu hóa các điều kiện boolean tốt hơn chúng ta có thể, anyway. –

1

Chỉ cần tách họ và kiểm tra từng cái một:

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

Bạn cần phải thêm '()' ở đó hoặc về cơ bản nó sẽ đi từng cái một và không phải là ý định của bạn để thử nghiệm hai nhóm riêng biệt và 'hoặc' cho chúng. – Dani

+0

@Dani Tôi tin bạn, nhưng bạn sẽ giải thích tại sao? Các toán tử theo thứ tự ưu tiên giảm dần là '==' rồi '&&' rồi '||', đúng không? Điều đó không có nghĩa là tất cả '== 'được thực hiện trước, sau đó là' && ', sau đó là' || '? Và điều đó không đúng? –

+0

nope, '&&' và '||' có cùng quyền ưu tiên, vì vậy trước tiên tất cả '==' sẽ xảy ra, sau đó 2 '&&' rồi '||' và sau đó là '&&' – Dani

11

Chỉ cần cho nhiều:

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

Cảm ơn rất nhiều! Bạn chỉ cần cho tôi ý tưởng tạo ra một hàm để đạt được điều này! –

+1

Tình yêu này, đạo cụ trên C++ 11. –

Các vấn đề liên quan