我将数组从函数返回到main函数时遇到了问题。该数组也用作另一个函数的参数。
#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;
}
基本上,这是一个不完整的数字猜测游戏,其中给用户一个提示,例如随机生成的数字和用户输入猜测共有的数字位数。我得到cout << black_marker(ran(r), guess(g));
的void类型错误,这是不寻常的,因为这个pass-by-reference方法在void函数体中有cout语句时会起作用。
答案 0 :(得分:0)
使用时
black_marker(ran(r), guess(g))
使用black_marker
和ran(r)
的返回值调用 guess(g)
。这些函数的返回类型是void
。 black_marker
的参数类型声明为int []
。这就是编译器抱怨的参数类型不匹配。
使用
ran(r);
guess(g);
cout << black_marker(r, g);
答案 1 :(得分:0)
black_marker(ran(r), guess(g))
black_marker
需要两个数组,但ran()
和guess(g)
返回void,因此您最终会使用black_marker(void, void)
,但这将无效。< / p>
你想做的是
#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;
}
但是你应该删除C风格的数组,而是使用std::vector
或std::array
。
答案 2 :(得分:0)
快速说明一下:
你的功能
int black_marker(int num1[], int num2[]);
将整数数组(引用)作为输入参数,但是使用函数调用为它们提供void:
black_marker(ran(r), guess(g));
因为run(r)和guess(g)返回void(没有),因为Pablo指出。
Sahu的解决方案将运作良好。
此外,如果您想坚持原始函数调用:
black_marker(ran(r), guess(g));
然后你可以从函数中返回int指针&#34; ran&#34;并且&#34;猜测&#34;如下:
int* ran(int list[]) {
...
return list;
}
int* guess(int list[]) {
...
return list;
}
然后你的函数调用可以正常工作,因为已知大小(= 4)。
或者,您可以使用数组引用:
int ( &ran( int (&list)[4] ) )[4] {
return list;
}
和
int ( &guess( int (&list)[4] ) )[4] {
return list;
}