La adición de declaraciones dentro de llaves cambian la funcionalidad de código?

votos
0

Soy bastante nuevo en C ++, estoy tratando de reproducir un código de referencia de C ++ que se convierte en una cadena de espacios en guiones. Aquí está el código

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

Ahora bien, esto funciona a la perfección, la salida que se ve es SALIDA: hello-world-how-are-you

Sin embargo, cuando le adjunto el código en sp_to_dashla función entre llaves como este

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

La salida que se ve es un bucle infinito de guiones, no entiendo por qué es así, ¿Puede alguien explicarme por qué la adición de código entre llaves como esto desencadena un bucle infinito?

Publicado el 02/09/2018 a las 05:42
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

El sangrado es engañosa. Sólo puede haber una sola declaración en virtud de un caso o de lo contrario rama. Para poner varios, debe ser una sentencia compuesta (llaves int). Así que esto

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

... es equivalente a este

    else
        cout<<("%c", *str);
    str++;
Respondida el 02/09/2018 a las 05:46
fuente por usuario

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