2011-01-16 32 views
17

Tôi đang tạo ứng dụng bảng điều khiển và sử dụng câu lệnh chuyển đổi để tạo một hệ thống menu đơn giản. Đầu vào của người dùng ở dạng một ký tự đơn hiển thị trên màn hình dưới dạng vốn. Tuy nhiên, tôi muốn chương trình chấp nhận cả chữ thường và chữ thường.Báo cáo chuyển đổi - sử dụng hoặc?

Tôi hiểu rằng công tắc được sử dụng để so sánh với các hằng số, nhưng là nó có thể làm điều gì đó như thế này:

switch(menuChoice) { 
    case ('q' || 'Q'): 
     //Some code 
     break; 
    case ('s' || 'S'): 
     //More code 
     break; 
    default: 
     break; 
} 

Nếu đây là không thể, là có một công việc xung quanh như tôi thực sự không muốn lặp lại mã - ngắn như những lần lặp lại đó.

Trả lời

17

Cú pháp chung được chấp nhận cho việc này là:

switch(menuChoice) { 
    case 'q': 
    case 'Q': 
     //Some code 
     break; 
    case 's': 
    case 'S': 
     //More code 
     break; 
    default: 
     break; 
} 

ví dụ: Do thiếu một break, chương trình thực hiện thác vào khối tiếp theo. Điều này thường được gọi là "rơi qua".

Điều đó nói rằng, tất nhiên bạn có thể đơn giản hóa trường hợp của biến 'menuChoice' trong trường hợp này thông qua toupper/tolower.

+1

Tôi nghĩ rằng đây phải là câu trả lời hay nhất chứ không phải câu trả lời ở trên - Không chỉ giải đáp cách giải quyết nó mà còn cho bạn biết tại sao trước khi bạn phải đi liên kết có thể tồn tại. –

2
switch (toupper(choice)) 
{ 
    case 'Q':... 
} 

... hoặc không cho phép.

+0

bạn nên (vì lý do di chuyển) sử dụng tolower, theo B.S. –

3

Chỉ cần sử dụng tolower(), đây là người đàn ông của tôi:

SYNOPSIS
#include ctype.h

int toupper(int c); 
    int tolower(int c); 

MÔ TẢ toupper() chuyển đổi thư c để chữ hoa, nếu có thể.

tolower() converts the letter c to lower case, if possible. 

    If c is not an unsigned char value, or EOF, the behavior of these 
    functions is undefined. 

RETURN GIÁ TRỊ Giá trị trả lại là của bức thư được chuyển đổi, hoặc c nếu chuyển đổi là không thể.

Vì vậy, trong ví dụ của bạn, bạn có thể switch() với:

switch(tolower(menuChoice)) { 
    case('q'): 
     // ... 
     break; 
    case('s'): 
     // ... 
     break; 
} 

Tất nhiên bạn có thể sử dụng cả hai toupper()tolower(), với vốn và phi vốn chữ cái.

3

Bạn có thể (và vì lý do có thể sử dụng lại, nên) trước khi nhập câu lệnh chuyển đổi sử dụng tolower fnc trên var của bạn.

3

'q' || 'Q' kết quả trong bool kết quả loại (đúng) được thăng loại không thể thiếu được sử dụng trong điều kiện chuyển đổi (char) - đưa ra các giá trị 1.Nếu trình biên dịch cho phép cùng một giá trị (1) được sử dụng trong nhiều nhãn, trong khi thực hiện , hãy chuyển đổi tuyên bố menuChoice sẽ được so sánh với giá trị 1 trong mỗi trường hợp. Nếu menuChoice có giá trị 1 thì mã trong nhãn trường hợp đầu tiên sẽ được thực hiện.

Do đó các câu trả lời được đề xuất ở đây sử dụng hằng số ký tự (là loại char) làm giá trị tích phân trong mỗi nhãn trường hợp.

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