2013-03-06 52 views
12

Tôi đang sử dụng câu lệnh chuyển đổi để trả về từ chức năng chính của tôi sớm nếu phát hiện một số trường hợp đặc biệt. Các trường hợp đặc biệt được mã hóa bằng cách sử dụng một loại enum, như hình dưới đây.Sử dụng loại enum trong câu lệnh chuyển đổi

typedef enum { 
    NEG_INF, 
    ZERO, 
    POS_INF, 
    NOT_SPECIAL 
} extrema; 

int main(){ 

    // ... 

    extrema check = POS_INF; 

    switch(check){ 
     NEG_INF: printf("neg inf"); return 1; 
     ZERO: printf("zero"); return 2; 
     POS_INF: printf("pos inf"); return 3; 
     default: printf("not special"); break; 
    } 

    // ... 

    return 0; 

} 

Lạ lùng thay, khi tôi chạy này, chuỗi not special được in ra cửa sổ Console và phần còn lại của hàm chính mang về với thực hiện.

Làm cách nào để nhận được câu lệnh chuyển đổi hoạt động đúng ở đây? Cảm ơn!

Trả lời

16

Không case nhãn. Bạn hiện có goto nhãn. Hãy thử:

switch(check){ 
    case NEG_INF: printf("neg inf"); return 1; 
    case ZERO: printf("zero"); return 2; 
    case POS_INF: printf("pos inf"); return 3; 
    default: printf("not special"); break; 
} 
+1

!! Tôi nên đã nhìn thấy điều đó nhưng tôi đã không. Tuyệt vời những gì bạn có thể đọc ngay trong quá khứ và không thông báo. – zwol

+0

Ồ. của tôi Thượng Đế. Tôi đã quen với Verilog, tôi quên tất cả về điều đó. Mã C này là một mô phỏng chức năng cho một số dự án Verilog mà tôi có. –

+0

Cảm ơn bạn rất nhiều! Tôi sẽ chấp nhận câu trả lời của bạn ngay khi nó cho phép tôi ..... –

1

Bạn đang thiếu hết sức quan trọng case:

switch(check){ 
    case NEG_INF: printf("neg inf");  return 1; 
    case ZERO: printf("zero");  return 2; 
    case POS_INF: printf("pos inf");  return 3; 
    default:  printf("not special"); break; 
} 

Bạn tạo ra một số nhãn (không sử dụng) với tên giống như hằng liệt kê của bạn (đó là lý do tại sao nó được biên dịch).

2

Bạn chưa sử dụng từ khóa "case". Các phiên bản đưa ra dưới đây sẽ làm việc tốt.

typedef enum { 
    NEG_INF, 
    ZERO, 
    POS_INF, 
    NOT_SPECIAL 

} extrema; 

int main(){ 

    extrema check = POS_INF; 

    switch(check){ 
     case NEG_INF: printf("neg inf"); return 1; 
     case ZERO: printf("zero"); return 2; 
     case POS_INF: printf("pos inf"); return 3; 
     default: printf("not special"); break; 
    } 

    return 0; 

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