gpt4 book ai didi

c++ - 在花括号内添加语句会改变代码功能吗?

转载 作者:太空狗 更新时间:2023-10-29 20:33:54 27 4
gpt4 key购买 nike

我是 C++ 的新手,我正在尝试从 C++ 引用中复制一段代码,将字符串中的空格转换为破折号。这是代码

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

现在这完美地工作了,我得到的输出是输出: Hello World 你好吗

但是,当我像这样用大括号将 sp_to_dash 函数中的代码括起来时

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

我得到的输出是破折号的无限循环,我不明白这是为什么,谁能向我解释为什么像这样在花括号中添加代码会触发无限循环?

最佳答案

缩进具有误导性。 if 或 else 分支下只能有一个语句。要放几个,必须是复合语句(在花括号中)。所以这个

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

...等同于此

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

所以添加花括号会改变程序的控制流,这就是为什么你会得到不同的行为。许多(可能是大多数)会建议总是添加花括号,即使是在单个语句分支上,以在未来证明它。

关于c++ - 在花括号内添加语句会改变代码功能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52134299/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com