2013-11-23 4 views
0

я столкнулся с проблемой в книге, когда я побежал код в MSDOSBox TurboC++ для Windows 7, он показал мне неожиданное поведение: -Неожиданное поведение Switch-Case в C

код следующим образом: -

#include <stdio.h> 
#include <conio.h> 
void main() 
{ 
    char s = 3; 
    switch(s) 
    { 
     case 1 : 
     printf("\nDiamond"); 
     break; 
     case 2 : 
     printf("\nSpades"); 
     break; 
     default : 
     printf("\nHeart"); 
     break; 
    } 
    printf("\nI thought something like this"); 
    getch(); 
} 

теперь проблема была ...

заявление в случае, если по умолчанию никогда не был напечатан. это только напечатанный «Я думал, что-то вроде этого»

я понял, что в выключателя случае символ трактуется как его значение в ASCII коде

Ну ... здесь, значение обугливаться сек было дано 3 не «3» но опять по крайней мере, по умолчанию случай должен быть напечатан, даже если значение не имеет ничего общего с какой-либо из случаев

хорошо ... если это помогает ..

я попытался поставить

case 3 : 

вместо

default : 

Теперь утверждение т.е. Е ("\ nHeart"); был выполнен и напечатан «Сердце» на экране

+5

Во-первых, почему вы все еще используете TURBO C COMPILER? –

+1

Он отлично работает для меня с компилятором MS C ... –

+0

извините, ребята. , на самом деле это MSDOSBox TurboC++ –

ответ

3

Вырезать/вставить этот код из своего источника или переименовать его? Если вы перепечатали его, вернитесь назад и убедитесь, что вы правильно указали default в оригинале.

Общая ошибка, которая обычно не вызывает предупреждения от компилятора, заключается в том, чтобы ввести что-то вроде defualt вместо default для этой последней метки.

+2

Не должно ли это вызвать «синтаксическую ошибку» из компилятора? –

+1

@mcleod_ideafix Нет, он будет записывать его как местоположение goto. – Caesar

+0

Кто будет вводить коды? –

Смежные вопросы