国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

c++ - Comment gérer une situation où la valeur par défaut est placée devant le bloc d'instructions switch
天蓬老師
天蓬老師 2017-07-06 10:35:10
0
3
2703
int c,i;
for (int i = 1; i < 3; ++i)
{
    switch (i)
    {
        default: c+=i;
        case 2: c++;break;
        case 4: c+=2;break;
    }
}
printf("%d\n", c);

Pourquoi ce code est-il égal à 3 ? N'est-ce pas le cas où default: c+=i; est utilisé lorsque i vaut 1 pour la première fois, cas 2 : c++;break; est utilisé lorsque i est égal à 2 pour la deuxième fois, puis se termine, et c =2 est sorti à la fin ? Pourquoi est-ce 3 ?

天蓬老師
天蓬老師

歡迎選擇我的課程,讓我們一起見證您的進步~~

répondre à tous(3)
女神的閨蜜愛上我

Tout d’abord, clarifions quelques points à noter en switch :

1.

switch 語句體由一系列 case 標簽和一個可選 default 標簽組成。 case 語句中的兩個常量表達式的計算結(jié)果不能為同一個值。 default 標簽只能出現(xiàn)一次。 標記語句不是語法要求,但如果它們不存在,switch 語句是無意義的。默認語句(即default標簽)無需顯示在末尾;它可以顯示在 switch 語句體的任何位置。 casedefault 標簽只能顯示在 switch au sein du communiqué.
Extrait de?: Documentation officielle de la déclaration Microsoft Visual Studio 2015 c++ Switch

2.

La portée de la déclaration casedefault本身就是標簽,就是告訴編譯器從滿足這個標簽開始向后執(zhí)行,之后不會再判斷其他標簽的正確性,直到break語句或者switch mentionnée ci-dessus prend fin.

Pour ce problème

éTAPE 1 ?: Lorsque i=1, car i!=2&&i!=4, l'exécution commence après la balise default This When. en exécutant l'instruction c+=i; (nous supposons maintenant que le compilateur initialise c à 0 pour vous, vous devez savoir que tous les compilateurs ne sont pas aussi conviviaux) la valeur de c après exécution est 1?; éTAPE 2i=1時,由于i!=2&&i!=4故從default標簽后開始執(zhí)行,此時執(zhí)行語句c+=i;(我們現(xiàn)在就假設(shè)編譯器幫你把c初始化為0,要知道并不是所有的編譯器都這么友好)執(zhí)行后c的值為1;
STEP 2:綜合上述1,2可知由于此時沒有碰到任何break語句也沒有到switch語句的作用域結(jié)束(因為這個default語句是放在第一個的)所以它接著向后執(zhí)行case 2后的語句(此時編譯器已經(jīng)不看滿不滿足case標簽了)此時執(zhí)行語句c++;執(zhí)行后c的值為2;遇到break語句跳出switch語句。
STEP 3:當i=2時,由于i滿足case 2的情況,所以直接從case 2便簽后的語句開始執(zhí)行,此時執(zhí)行語句c++,執(zhí)行后c的值為3,遇到break語句跳出switch語句。
STEP 4:當i=3時,跳出for?: Sur la base des éléments 1 et 2 ci-dessus, on peut voir que parce qu'aucune instruction break n'est rencontrée à ce moment et que la portée de l'instruction switch n'est pas terminée (à cause de cela default L'instruction est placée en premier), donc elle exécute ensuite l'instruction après le case 2 à l'envers (à ce moment, le compilateur n'a pas satisfait le case Label) A ce moment, l'instruction c++ est exécutée?; la valeur de c après l'exécution est 2?; lorsque l'instruction break est rencontrée, le switch est sautée.
éTAPE 3?: Lorsque i=2, puisque i satisfait la situation du cas 2, suivez donc directement l'instruction après le cas 2 note Démarrez l'exécution. à ce moment, l'instruction c++ est exécutée. Après l'exécution, la valeur de c est 3. Lorsque l'instruction break est rencontrée, le switch L'instruction est sautée.

??éTAPE 4???: Lorsque i=3, sortez de la boucle for et affichez c=3?; ???? (Le processus ci-dessus est la conclusion que j'ai tirée en utilisant le débogage en une seule étape de Visual Studio 2015. et en combinant les données) ?? ??
三叔

Quand i=1, il entre par défaut?: c=1 et il n'y a pas de pause, donc continuez à faire correspondre le cas 2 et obtenez c=2 break
Quand i=2, il correspond d'abord au cas 2 et entre dans le cas 2?: c=3 break
Quand i=3 Le cycle ne tient pas.
La sortie c est 3

三叔
var c = 0,i;
for (var i = 1; i < 3; ++i)
{
    switch (i) {
        default: c+=i;console.log('defalult:'+c);
        case 2: c++;console.log('case2:'+c);break;
        case 4: c+=2;console.log('case4:'+c);break;
    }
    console.log(i, c);
}
console.log('last:'+c);
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal