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...                            


2 réponses

voix
1

Probablement l'indentation az est source de confusion. Sans bretelles seule la première ligne est exécutée et str++ne vise pas à faire partie de la branche , mais d' autre être exécuté à chaque cycle. Dans le second cas , la str est ed incrément seul endroit le caractère actuel n'est pas « - » ce qui est vrai à la fin.

En outre, il continuera à lire la mémoire après avoir atteint la fin de la chaîne. Cette zone menory appartient à un autre processus variable ou peut-être d'autres cela, il peut être traité comme des caractères aléatoires de votre point de vue.

Créé 02/09/2018 à 05:50
source utilisateur

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