Legge uttalelser inne klammeparentes endre koden funksjonalitet?

stemmer
0

Jeg er ganske ny på C ++, jeg prøver å gjenskape en kode fra C ++ referanse som viser områder i en streng til streker. Her er koden

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

Nå er dette fungerer perfekt, utgangs jeg får er UTGANG: hello-world-how-are-you

Men når jeg legge koden i sp_to_dashfunksjon i klammeparentes som dette

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

Utgangen jeg får er en uendelig løkke av streker, jeg forstår ikke hvorfor det er, Kan noen forklare meg hvorfor legge kode i klammeparentes som dette utløser en uendelig loop?

Publisert på 02/09/2018 klokken 05:42
kilden bruker
På andre språk...                            


2 svar

stemmer
1

Sannsynligvis den az innrykk er forvirrende. Uten seler bare den første linjen er utført og str++er ikke ment å være en del av gren andre, men skal utføres i hver syklus. I det andre tilfellet str er økningen ed eneste stedet den nåværende karakter er ikke '-' som er sant på slutten.

Videre vil det fortsette å lese minnet etter at det kom til slutten av strengen. Dette menory området tilhører andre variable eller kanskje annen prosess dette kan håndteres som tilfeldige tegn fra ditt perspektiv.

Svarte 02/09/2018 kl. 05:50
kilden bruker

stemmer
0

Den innrykk er misvisende. Det kan bare være en enkelt setning under en hvis ellers gren. For å sette flere, må det være en sammensatt setning (int klammeparentes). Så dette

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

... tilsvarer dette

    else
        cout<<("%c", *str);
    str++;
Svarte 02/09/2018 kl. 05:46
kilden bruker

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