} while (mf_bingo(c) != 5);
这是我不断收到错误的行。我尝试在mf_bingo(c)之前放置一个空格并取出(c)
编辑: 这是完整的循环
do
{
char yesNo;
int c, d;
if (yesNo == 'y' || yesNo == 'Y')
{
cout << "Player 1 how many numbers are on your card" << endl;
cin >> c;
mf_bingo(c);
}
else if (yesNo == 'n' || yesNo == 'N')
{
cout << "Sorry player 1" << endl;
}
cout << "Player 2 do you see this number on your card." << endl;
cin >> yesNo;
if (yesNo == 'y' || yesNo == 'Y')
{
cout << "Player 2 how many numbers are on your card" << endl;
cin >> c;
mf_bingo(c);
}
else if (yesNo == 'n' || yesNo == 'N')
{
cout << "Sorry player 2" << endl;
}
cout << "Press 1 to continue generating random numbers." << endl;
cin >> d;
mf_numbers(d);
} while (mf_bingo(c) != 5);
这里是mf_numbers
void mf_numbers(int d)
{
int xRan;
srand(time(0));
xRan = rand() % 50 + 1;
cout << xRan << endl;
}
这是mf_bingo
void mf_bingo(int c)
{
if (c == 0)
cout << "You need to match get 5 more matching numbers to win." << endl;
else if (c == 1)
{
cout << "You only need 4 more matching numbers to win" << endl;
}
else if (c == 2)
{
cout << "You only need 3 more numbers to win" << endl;
}
else if (c == 3)
{
cout << "You only need 2 more numbers to win" << endl;
}
else if (c == 4)
{
cout << "You only need 1 more number to win" << endl;
}
else if (c == 5)
{
cout << "You win!!!" << endl;
}
}
答案 0 :(得分:5)
问题是声明void mf_bingo()
。你必须使这个函数返回int
。
您可以使用以下代码重现此问题:
void mf_bingo(int c) { // void doesn't return anything
}
int main() {
do { } while(mf_bingo(c) != 5);
}
错误C2120解释说,当函数返回void
时,即没有任何内容,您无法将其与整数进行比较。通常情况下,intellisence应该已经将mf_bingo强调为潜在错误,并提供更准确的描述。
您可以轻松纠正此问题:
int mf_bingo(int c) { // here we return something
... // same logic as before
return c;
}
答案 1 :(得分:3)
Compiler Error C2120表示您使用void
类型,您应该使用其他类型(在您的情况下:int
)。
您需要更改:
void mf_bingo(int c)
为:
int mf_bingo(int c)
并适当地更改函数的主体,以便它返回int
,使您提到的行:} while (mf_bingo(c) != 5);
按预期工作。
答案 2 :(得分:3)
mf_bingo
会返回void
,您无法将其与任何内容进行比较。您需要mf_bingo
来返回可以比较的类型(在您的示例中,它需要与5
相当)。根据玩家是否获胜,你可以让它返回true
或false
:
bool mf_bingo(int c)
{
if (c == 0)
{
cout << ...
// no win:
return false;
}
etc...
else if (c == 5)
{
cout << "you win!";
return true;
}
// no match:
return false;
}
答案 3 :(得分:2)
mf_bingo
返回类型为void(即它不返回任何内容),您在while循环中处理它,就像它返回一个整数值一样。
要解决此问题,您可以将该功能的签名更改为int mf_bingo(int c)
,然后它就可以返回c
。由于mf_bingo
实际上没有改变c
,所以这似乎有点无意义。
因此,您已经在循环终止条件中检查了值c
。
你可以这样做
do
{
// other code
// just print stuff
mf_bingo(c);
} while(c < 5);
同时注意
您还应该面对另一个问题,即在c
循环中定义do while
。这也可能无法编译,可能无法正常运行。
e.g。
int main()
{
do
{
int c = 1;
c++;
}
while (c < 5);
return 0;
}
如果这个编译(它不应该),你就会有一个无限循环,因为c
永远不会达到5.在循环之外移动c
。一切都好。
int main()
{
int c = 1;
do
{
c++;
}
while (c < 5);
return 0;
}