Ajout d'instructions à l'intérieur des accolades modifier la fonctionnalité de code?

voix
0

Je suis assez nouveau à C, je suis en train de reproduire un code de référence C qui transforme des espaces dans une chaîne de tirets. Voici le code

void sp_to_dash(const char *str){
    while(*str){
        if(*str==' ')
            cout<<(%c, '-');

        else
            cout<<(%c, *str);
            str  ;

    }
}

int main(){
    sp_to_dash(hello world how are you);
    int j;
    cin>>j;
    return 0;
}

Maintenant, cela fonctionne parfaitement, la sortie que je reçois est SORTIE: hello-world-how-are-you

Cependant , quand je le code ci - joint en sp_to_dashfonction des accolades comme celle - ci

void sp_to_dash(const char *str) {
    while (*str) {
        if (*str==' ') {
            cout << (%c, '-');
        } else {
            cout << (%c, *str);
            str  ;
        }
    }
}

La sortie que je reçois est une boucle infinie de traits, je ne comprends pas pourquoi c'est, tout le monde peut me expliquer pourquoi l'ajout de code dans les accolades comme celui-ci déclenche une boucle infinie?

Créé 02/09/2018 à 05:42
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Le retrait est trompeur. Il ne peut y avoir une seule déclaration en vertu d'une si succursale ou autre. Pour mettre plusieurs, il doit être une instruction composée (int des accolades). Donc ça

    else
        cout<<("%c", *str);
        str++;

... est équivalent à ce

    else
        cout<<("%c", *str);
    str++;
Créé 02/09/2018 à 05:46
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more