我是 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/