0

在我的教科书中有一个叫做streq检查字符串是否相等的函数。我复制了这段代码,并决定cout << *s1 << endl;在返回 false 之前添加以查看它打印出来的内容。但是,我注意到如果两个输入字符串相等并且我添加了额外的代码,它将返回 false。

#include <iostream>
using namespace std;

bool streq(const char* s1, const char* s2);

int main()
{
    const char A [] = "Hello";
    const char B [] = "Hello";

    cout << streq(A,B) << endl;
}

bool streq(const char* s1, const char* s2)
{    
    int count = 0;

    while (*s1 != 0 && *s2 != 0)
        if (*s1++ != *s2++)
            cout << *s1 <<  endl;
            return false;
        count++;
    return (*s1 == *s2);
}

但是,如果我注释掉我添加的代码,该函数将正常工作并返回 true (1)。有谁知道这里的问题是什么?

4

1 回答 1

6

尽管有缩进,这段代码

if (*s1++ != *s2++)
    cout << *s1 <<  endl;
    return false;

相当于:

if (*s1++ != *s2++)
{
    cout << *s1 <<  endl;
}
return false;

这就是为什么你的修改改变了程序的逻辑。if条件控制下一条语句,仅一条语句。如果需要多个语句,则需要使用块。

if (*s1++ != *s2++)
{
    cout << *s1 <<  endl;
    return false;
}

这就是为什么有些人总是选择使用带有ifand的块else,即使后面只有一个语句。当您稍后需要添加更多语句时,它不太容易出错。

于 2013-11-14T06:42:14.657 回答