2013-03-06 26 views
12

Bazı özel durumlar algılandığında, ana işlevimin başından dönmek için bir anahtar deyimi kullanıyorum. Özel durumlar, aşağıda gösterildiği gibi bir enum tipi kullanılarak kodlanır. Bunu çalıştırdığınızda Garip Bir anahtar deyiminde enum tipini kullanma

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; 

} 

, dize not special konsola yazdırılır ve ana işlevi geri kalanı yürütme ile devam ediyor.

Anahtar deyimini burada düzgün çalışmasını nasıl sağlayabilirim? Teşekkürler!

cevap

16

case etiketleri. Şu anda goto etiketiniz var. Deneyin:

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

!! Bunu görmeliydim ama yapmadım. Şimdiden okuyabildiğin ve fark etmediğin şeylere inanılmaz. – zwol

+0

Oh. benim. Tanrı. Verilog'a çok alıştım, hepsini unuttum. Bu C kodu, sahip olduğum bazı Verilog projelerinin işlevsel bir simülasyonudur. –

+0

Çok teşekkür ederim! Cevabını bana izin verir vermez kabul edeceğim ..... –

1

Sen case tüm önemli eksik:

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

Sen numaralandırma sabitleri aynı isimdeki bazı (kullanılmayan) etiketleri yarattı (o derlenmiş neden olan).

2

"case" anahtar sözcüğünü kullanmadınız. Aşağıda verilen sürüm iyi çalışacaktır.

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; 

} 
İlgili konular