Aquí podría ser tu PUBLICIDAD


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 j_h_o_m_o
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 StoryTeller


Aquí podría ser tu PUBLICIDAD