我有一个主要函数,该函数调用readNumbers来创建由用户提示的长度动态分配的数组。然后,将此数组传递给printNumbers,后者将打印元素的索引,然后打印空格,相应的元素值和新行。
我的代码在算法上是正确的,但是,我的老师希望将输出打印在main内部,而不是在函数内部。但是,我很困惑,因为我被告知printNumbers必须具有void的返回类型-因此,此函数不会打印出东西以便您可以看到此输出吗?如何在main中打印输出?
主要:
#include <iostream>
int * readNumbers(int n);
void printNumbers(int *numbers, int length);
int main (void)
{
int length;
std::cout<<"Enter your array length: "<<std::endl;
std::cin>>length;
int *arr=readNumbers(length);
printNumbers(arr,length);
delete[] arr;
return 0;
}
功能文件:
#include <iostream>
int * readNumbers(int n)
{
int *arr=new int[n]; //array dynamically allocated
for (int i=0; i<n; i++)
{
std::cout<<"Enter value: "<<"\n";
std::cin>>*(arr +i);
}
return arr;
}
void printNumbers(int *numbers, int length)
{
for (int i=0; i<length; i++)
{
std::cout<<i<<" "<<*(numbers+i)<<std::endl;
}
}
答案 0 :(得分:3)
据我所知,您的问题是:必须在main中打印值,但调用的函数必须返回void
。
这里是一个使用“输出参数”的解决方案(我讨厌它们,通常不会使用它们,但考虑到约束条件,它们是一个合理的选择):
void printNumbers(int *numbers, int length, std::string &result)
{
std::stringstream ret;
for (int i=0; i<length; i++) {
ret << i << " " << *(numbers+i) << std::endl;
}
result = ret.str();
}
int main()
{
...
std::string res;
printNumbers(arr, length, res);
std::cout << res;
...
}
另一种(可怕的)解决方案是将结果放入函数内部的全局变量,然后在函数调用后在main
中打印全局变量的内容。但是请不要那样做。
正确的解决方案是让函数以std::string
(不是 void
)的形式返回结果,然后以{{1} }仅打印函数调用的结果。