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

标签 c++

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

相关文章:

c++ - 用 2x1 和 1x2 多米诺骨牌拼贴 2xN 网格的方法有多少种?

c++ - STD::Vector- 直接写入内部数组

c++ - 将指针传递给 const ref 函数

c++ - 当成员析构函数运行时,类具有什么类型的虚函数?

c++ - 按钮和字体看起来低分辨率 windows.h

c++ - 冲突检测期间堆栈溢出错误

C++ std::async 比顺序 for 循环慢

c++ - SDL使用SDL_Rect渲染透明矩形

c++ - 如何在 QListWidget 下添加这样的组按钮?

c++ - 矩形交点(垂直线)