我是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("hell
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;
}
现在这很完美,我得到的输出是
OUTPUT:
你好,世界怎么样,是,你
但是,当我将代码括在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++;
因此,添加花括号会更改程序的控制流程,这就是您获得不同行为的原因.许多(可能是大多数)会建议总是添加大括号,甚至在单个语句分支上,以便将来证明它.
