Bon appetit :从 int 返回类型函数在 main() 中打印字符串

Bon appetit : printing a string in main() from a int return type function

本文关键字:main 字符串 打印 函数 appetit int 返回类型 Bon      更新时间:2023-10-16

>问题是..我必须从具有返回类型的函数int main()打印"Bon appetitint..这是我的代码:

#include <iostream>
#include <vector>
using namespace std;
int bonAppetit(int n, int k, int b, vector <int> ar) {
// Complete this function
int sum = 0; 
for(auto i : ar )
{
sum += i;
}
sum -= ar[k];
if(sum/2 == b)
cout<< "Bon Appetit"<<endl;
else
return b-(sum/2);
}
int main() {
int n;
int k;
cin >> n >> k;
vector<int> ar(n);
for(int ar_i = 0; ar_i < n; ar_i++){
cin >> ar[ar_i];
}
int b;
cin >> b;
int result = bonAppetit(n, k, b, ar);
cout << result << endl;
return 0;
}

如果我使用cout<<"Bon appetit".在输出中,由于return b-(sum/2),它显示为Bon appetit0。 另一个问题是我的 IDE 不允许我在else部分编写return b/(sum)/2,否则会生成一个警告,该警告被视为错误,并且代码不会简单地编译:control reaches end of non-void function [-Werror = return type]

所以,简而言之"我如何从 int 类型函数将字符串返回给 MAIN()"? 请不要建议不使用函数并在main()中快速编写代码。

链接到问题==> https://www.hackerrank.com/challenges/bon-appetit/problem

int bonAppetit(int n, int k, int b, vector <int> ar) {
// Complete this function
int sum = 0; 
for(auto i : ar )
sum += i;
sum -= ar[k];
if(sum/2 == b)
return -1;
else
return b-(sum/2);
}

主要:

if (result != -1) std::cout << result << std::endl;
else std::cout << "Bon Appetit" << std::endl;

请不要使用using namespace std.在这里阅读原因

您可以使用byRef Arguments从一个函数返回两个值。 这是一个简单的示例:

char* isDividableOn(int num, int divider ,int & remain){
if ( num % divider == 0){
remain = 0;
return "number is dividable";
}
else {
remain = num % divider;
return "number is not dividable";
}
}
int main (){
int num = 11;
int divider = 3;
int res = -1;
cout << isDividableOn(num , divider, res);
/// in this point  value of res now is set to 2;
}

它起作用了:

#include <iostream>
#include <vector>
using namespace std;
string bonAppetit(int n, int k, int b, vector <int> ar) {
// Complete this function
int sum = 0; 
for(auto i : ar )
{
sum += i;
}
sum -= ar[k];
if(sum/2 == b)
return "Bon Appetit";
string str = to_string(b-(sum/2));
return str;
}
int main() {
int n;
int k;
cin >> n >> k;
vector<int> ar(n);
for(int ar_i = 0; ar_i < n; ar_i++){
cin >> ar[ar_i];
}
int b;
cin >> b;
string result = bonAppetit(n, k, b, ar);
cout << result << endl;
return 0;
}

你的 fonction 的每个流都必须返回一个int。因此,只需显示您的文本,然后返回。

int bonAppetit(int n, int k, int b, vector <int> ar) {
// Complete this function
int sum = 0; 
for(auto i : ar )
{
sum += i;
}
sum -= ar[k];
if(sum/2 == b)
cout<< "Bon Appetit"<<endl;
return b-(sum/2);
}

如果你真的需要将字符串"返回"到 main,这意味着你的函数同时返回int和 ̀string。在C++中,函数只有一个返回类型。然后,您有几个选项可以让函数提供两个输出(intstring)。以下是两个简单的选项:

返回pair(intstring):

pair<int,string> bonAppetit(int n, int k, int b, vector <int> ar) {
// Complete this function
int sum = 0; 
for(auto i : ar )
{
sum += i;
}
sum -= ar[k];
return make_pair( b-(sum/2), ((sum/2 == b) ? "Bon Appetit" : "") );
}

那么你的主要将做:

pair<int,string> result = bonAppetit(n, k, b, ar);
if ( !result.second.empty() )
cout << result.second << endl;
cout << result.first << endl;

或者传递一个string作为对函数的引用(如果不是const引用,它将让你的函数修改它):

int bonAppetit(int n, int k, int b, vector <int> ar, string& message) 
{
// Complete this function
int sum = 0; 
for(auto i : ar )
{
sum += i;
}
sum -= ar[k];
if (sum/2 == b)
message = "Bon Appetit";
return b-(sum/2);
}

那么你的主要将做:

string text;
int result = bonAppetit(n, k, b, ar, text);
if ( !text.empty() )
cout << text << endl;
cout << result.first << endl;
相关文章: