Adicionando declarações dentro chaves alterar a funcionalidade do código?

votos
0

Eu sou bastante novo para C ++, eu estou tentando replicar um código de referência C ++ que transforma os espaços em uma string para traços. Aqui está o 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;
}

Agora isso funciona perfeitamente, a saída que eu vejo é SAÍDA: hello-world-how-are-you

No entanto, quando eu coloque o código na sp_to_dashfunção em chaves como este

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

A saída que eu vejo é um loop infinito de traços, eu não entendo por que isso acontece, alguém pode me explicar por que a adição de código entre chaves como esta provoca um loop infinito?

Publicado 02/09/2018 em 05:42
fonte usuário
Em outras línguas...                            


2 respostas

votos
1

Provavelmente o recuo az é confuso. Sem chaves apenas a primeira linha é executada e str++não se destina a ser parte do ramo mais, mas ser executado em cada ciclo. No segundo caso, o str é ed incremento único local o personagem atual não é '-' o que é verdade no final.

Além disso, continuará lendo a memória depois de ter atingido o fim da cadeia. Esta área menory pertence a outro processo variável ou talvez outro esta pode ser tratada como caracteres aleatórios de sua perspectiva.

Respondeu 02/09/2018 em 05:50
fonte usuário

votos
0

O recuo é enganosa. Só pode haver uma única instrução no âmbito de um caso ou então ramo. Para colocar vários, ele deve ser uma instrução composta (chaves int). Então, é isso

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

... é equivalente a esta

    else
        cout<<("%c", *str);
    str++;
Respondeu 02/09/2018 em 05:46
fonte usuário

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