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


2 respuestas

votos
1

Probablemente la sangría az es confuso. Sin aparatos sólo la primera línea se ejecuta y str++no está destinado a formar parte de la rama más que ser ejecutado en cada ciclo. En el segundo caso, el str es ed único lugar de la subasta el carácter actual no es '-' lo cual es cierto en el extremo.

Además, continuará la lectura de la memoria después de haber alcanzado el final de la cadena. Esta zona menory pertenece a otro proceso variable o tal vez otra esto puede ser manejado como caracteres aleatorios desde su punto de vista.

Respondida el 02/09/2018 a las 05:50
fuente por usuario

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