如果后跟 return (c++),cout 将不起作用
cout doesn't work if followed by return (c++)
总的来说,我对编程还很陌生,所以我编写了一个程序来研究字符串及其局限性,我遇到了两个问题。我很困惑为什么当我运行下面的程序时,函数中cout
的none被执行了,为什么语句a[0] == b[0]
为真。
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
string compare(string a, string b){
if (a[0] == b[0])
cout<<"a = b"<<endl;
return "equal";
if (a[0] < b[0])
cout<<"a < b"<<endl;
return "less than";
if (a[0] > b[0])
cout<<"a > b"<<endl;
return "greater than";
return "nothing";
}
int main(){
string a = "Hello";
string b = "World";
string str;
str = compare(a, b);
cout << "str = " << str;
return 0;
}
结果是:
str = equal
如果您正确地缩进了代码,那么您会看到您所看到的行为的原因将变得显而易见:
string compare(string a, string b){
if (a[0] == b[0])
cout<<"a = b"<<endl;
return "equal";
// ...
}
总是returns"equal"
。您需要添加大括号来对两行进行分组:
string compare(string a, string b) {
if (a[0] == b[0])
{
cout << "a = b" << endl;
return "equal";
}
// etc.
}
这是正确的结果,因为你没有将你有意的分支代码放入括号对{}
。所以在你的函数中,语句 return "equal";
总是被执行。
总的来说,我对编程还很陌生,所以我编写了一个程序来研究字符串及其局限性,我遇到了两个问题。我很困惑为什么当我运行下面的程序时,函数中cout
的none被执行了,为什么语句a[0] == b[0]
为真。
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
string compare(string a, string b){
if (a[0] == b[0])
cout<<"a = b"<<endl;
return "equal";
if (a[0] < b[0])
cout<<"a < b"<<endl;
return "less than";
if (a[0] > b[0])
cout<<"a > b"<<endl;
return "greater than";
return "nothing";
}
int main(){
string a = "Hello";
string b = "World";
string str;
str = compare(a, b);
cout << "str = " << str;
return 0;
}
结果是:
str = equal
如果您正确地缩进了代码,那么您会看到您所看到的行为的原因将变得显而易见:
string compare(string a, string b){
if (a[0] == b[0])
cout<<"a = b"<<endl;
return "equal";
// ...
}
总是returns"equal"
。您需要添加大括号来对两行进行分组:
string compare(string a, string b) {
if (a[0] == b[0])
{
cout << "a = b" << endl;
return "equal";
}
// etc.
}
这是正确的结果,因为你没有将你有意的分支代码放入括号对{}
。所以在你的函数中,语句 return "equal";
总是被执行。