C++ C++;-将数组返回主函数并将数组传递给另一个函数
我在将数组从函数返回到主函数时遇到问题。该数组还用作另一个函数的参数C++ C++;-将数组返回主函数并将数组传递给另一个函数,c++,arrays,C++,Arrays,我在将数组从函数返回到主函数时遇到问题。该数组还用作另一个函数的参数 #include <iostream> #include <algorithm> #include <cmath> #include <cstdlib> using namespace std; void ran(int list[]); void guess(int list[]); int black_marker(int num1[], int num2[]); int
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdlib>
using namespace std;
void ran(int list[]);
void guess(int list[]);
int black_marker(int num1[], int num2[]);
int main(){
int r[4];
int g[4];
cout << black_marker(ran(r), guess(g));
}
void ran(int list[]){ //random number generator
srand (time(NULL));
int a = rand() % 6 + 1;
int b = rand() % 7 + 1;
while(a == b)
b = rand() % 7 + 1;
int c = rand() % 8 + 1;
while(a == c || b == c)
c = rand() % 8 + 1;
int d = rand() % 9 + 1;
while(a == d || b == d || c == d)
d = rand() % 9 + 1;
int num_random[4] = {a, b, c, d};
}
void guess(int list[]){ //takes user input for a guess
int random_no[4];
for(int i = 0; i < 4; i++){
cin >> random_no[i];
}
}
int black_marker(int num1[], int num2[]){ //Counts how many digits from random number
int black_count = 0; //is similar to the user's guess
for(int i = 0; i < 4; i++){
if(num1[i] == num2[i]){
black_count += 1;
}
}
return black_count;
}
#包括
#包括
#包括
#包括
使用名称空间std;
void-ran(int-list[]);
无效猜测(整数列表[]);
int-black_标记(int-num1[],int-num2[]);
int main(){
int r[4];
int g[4];
cout>random_no[i];
}
}
int-black_标记(int-num1[],int-num2[]){//计算随机数的位数
int black_count=0;//类似于用户的猜测
对于(int i=0;i<4;i++){
if(num1[i]==num2[i]){
黑色_计数+=1;
}
}
返回黑色_计数;
}
基本上,这是一个不完整的数字猜测游戏,其中向用户提供了一个提示,例如随机生成的数字所共有的位数和用户输入的猜测。当您使用时,cout会出现一个void类型错误
black_marker(ran(r), guess(g))
使用ran(r)
和guess(g)
的返回值调用black\u标记
。这些函数的返回类型是void
。black\u marker
的参数类型声明为int[]
。这就是编译器抱怨的参数类型不匹配
使用
ran(r);
猜测(g);
coutblack\u marker(ran(r),guess(g))
black\u marker
需要两个数组,但是ran()
和guess(g)
返回void,所以您最终得到的是black\u marker(void,void)
,这是行不通的
你想做的是
#include <cmath>
#include <iostream>
using namespace std;
void ran(int list[]){ //random number generator
srand (time(NULL));
int a = rand() % 6 + 1;
int b = rand() % 7 + 1;
while(a == b)
b = rand() % 7 + 1;
int c = rand() % 8 + 1;
while(a == c || b == c)
c = rand() % 8 + 1;
int d = rand() % 9 + 1;
while(a == d || b == d || c == d)
d = rand() % 9 + 1;
list[0] = a;
list[1] = b;
list[2] = c;
list[3] = d;
}
void guess(int list[]){ //takes user input for a guess
int random_no[4];
for(int i = 0; i < 4; i++){
cin >> list[i];
}
}
int black_marker(int num1[], int num2[]){ //Counts how many digits from random number
int black_count = 0; //is similar to the user's guess
for(int i = 0; i < 4; i++){
if(num1[i] == num2[i]){
black_count += 1;
}
}
return black_count;
}
int main(){
int r[4];
int g[4];
ran(r);
guess(g);
cout << black_marker(r, g) << endl;
}
#包括
#包括
使用名称空间std;
void-ran(int-list[]){//随机数生成器
srand(时间(空));
int a=rand()%6+1;
int b=rand()%7+1;
while(a==b)
b=兰德()%7+1;
int c=rand()%8+1;
而(a==c | | b==c)
c=rand()%8+1;
int d=rand()%9+1;
而(a==d | | b==d | | c==d)
d=rand()%9+1;
列表[0]=a;
列表[1]=b;
列表[2]=c;
列表[3]=d;
}
void guess(int list[]){//接受用户输入进行猜测
int random_no[4];
对于(int i=0;i<4;i++){
cin>>列表[i];
}
}
int-black_标记(int-num1[],int-num2[]){//计算随机数的位数
int black_count=0;//类似于用户的猜测
对于(int i=0;i<4;i++){
if(num1[i]==num2[i]){
黑色_计数+=1;
}
}
返回黑色_计数;
}
int main(){
int r[4];
int g[4];
冉(r);
猜测(g);
cout只是一个简短的提示:
你的职能
int black_marker(int num1[], int num2[]);
将整数数组(引用)作为输入参数,但使用函数调用为其提供void:
black_marker(ran(r), guess(g));
正如巴勃罗所指出的,因为ran(r)和guess(g)返回void(nothing)
萨胡的解决方案将很有效
此外,如果要坚持原始函数调用,请执行以下操作:
black_marker(ran(r), guess(g));
然后,您可以从函数“ran”和“guess”返回int指针,如下所示:
int* ran(int list[]) {
...
return list;
}
int* guess(int list[]) {
...
return list;
}
那么函数调用将正常工作,因为大小已知(=4)
或者,您可以使用数组引用:
int ( &ran( int (&list)[4] ) )[4] {
return list;
}
及
欢迎使用C++和所有内置的容器作为标准库的一部分。使用<代码> STD::向量< /代码>。在常数引用的传递过程中读取。Brimul-MaX作为第一个参数数组,但提供空格函数空隙RAN(R),是的,我意识到 STD::向量< /代码>更方便。
int ( &ran( int (&list)[4] ) )[4] {
return list;
}
int ( &guess( int (&list)[4] ) )[4] {
return list;
}