cin: 未找到采用左操作数的运算符
cin: No Operator Found Which Takes A Left-Hand Operand
我正在尝试将两个 space 分隔的变量和 运行 放入此错误中,以及 [没有运算符 ">>" 匹配这些操作数] 和 [语法错误: " >>"].
#include <iostream>
#include <string>
#include <vector>
using namespace std;
...
void player(char array[][ROWS_AND_COLUMNS], char letter)
{
bool element_occupied = false;
do
{
int row = 0;
int column = 0;
cout << "Enter player " << letter << ", row and column:";
cin >> inputValidate(row, 1, 3) >> inputValidate(column, 1, 3);
if (array[(row - 1)][(column - 1)] == '*')
{
array[(row - 1)][(column - 1)] = letter;
element_occupied = true;
}
else
{
cout << "Sorry, that spot is taken." << endl;
element_occupied = false;
}
} while (element_occupied == false);
}
inputValidate()
接受输入、最小值和最大值,returns 接受输入值(如果是 1、2 或 3)。
编辑:
int inputValidate(int user_number, int lowest, int highest)
{
while (!(cin >> user_number) || (user_number < lowest || user_number > highest))
{
cout << "Error. Enter a number from " << lowest << " to " << highest << ": ";
cin.clear();
}
return user_number;
}
这是一款井字游戏。
inputValidate()
returns a temporary int
,一个 operator>>
无法读入的右值。它需要一个左值(即,一个有名字的变量)。这就是为什么您在 cin >> inputValidate(...)
语句中收到错误。
即使该语句可以编译,使用它也没有任何意义。 inputValidate()
自己读取 cin
,所以 player()
不应该试图将 inputValidate()
的 return 值传递给 cin >>
来开始和。 inputValidate()
会读入一个经过验证的数字,return 它,然后 player
会尝试读入一个新的未经验证的数字来覆盖它。
就此而言,传递 user_number
参数根本没有意义。您正在 按值 传递它,只是为了立即用用户输入覆盖它。所以 player()
传入的值是无关紧要的。如果你想 return
用户的输入,那么 user_number
应该是 inputValidate()
内部的局部变量。否则,它应该是 通过引用 传递的输出参数,而 inputValidate()
的 return 值应该是 void
.
此外,当 operator>>
由于输入无效而在 inputValidate()
内失败时,您不会丢弃导致它失败的输入。 cin.clear()
仅重置流的错误状态,不会丢弃任何数据。为此,您需要致电 cin.ignore()
。
话虽如此,试试这样的东西:
#include <iostream>
#include <string>
#include <vector>
#include <limits>
using namespace std;
...
int inputValidate(int lowest, int highest)
{
int user_number;
do
{
if (!(cin >> user_number))
{
cout << "Invalid. Enter a valid number: ";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
else if (user_number < lowest || user_number > highest)
{
cout << "Error. Enter a number from " << lowest << " to " << highest << ": ";
}
else break;
}
while (true);
return user_number;
}
void player(char array[][ROWS_AND_COLUMNS], char letter)
{
int row, column;
do
{
cout << "Enter player " << letter << ", row and column:";
row = inputValidate(1, 3) - 1;
column = inputValidate(1, 3) - 1;
if (array[row][column] == '*')
break;
cout << "Sorry, that spot is taken." << endl;
}
while (true);
array[row][column] = letter;
}
我正在尝试将两个 space 分隔的变量和 运行 放入此错误中,以及 [没有运算符 ">>" 匹配这些操作数] 和 [语法错误: " >>"].
#include <iostream>
#include <string>
#include <vector>
using namespace std;
...
void player(char array[][ROWS_AND_COLUMNS], char letter)
{
bool element_occupied = false;
do
{
int row = 0;
int column = 0;
cout << "Enter player " << letter << ", row and column:";
cin >> inputValidate(row, 1, 3) >> inputValidate(column, 1, 3);
if (array[(row - 1)][(column - 1)] == '*')
{
array[(row - 1)][(column - 1)] = letter;
element_occupied = true;
}
else
{
cout << "Sorry, that spot is taken." << endl;
element_occupied = false;
}
} while (element_occupied == false);
}
inputValidate()
接受输入、最小值和最大值,returns 接受输入值(如果是 1、2 或 3)。
编辑:
int inputValidate(int user_number, int lowest, int highest)
{
while (!(cin >> user_number) || (user_number < lowest || user_number > highest))
{
cout << "Error. Enter a number from " << lowest << " to " << highest << ": ";
cin.clear();
}
return user_number;
}
这是一款井字游戏。
inputValidate()
returns a temporary int
,一个 operator>>
无法读入的右值。它需要一个左值(即,一个有名字的变量)。这就是为什么您在 cin >> inputValidate(...)
语句中收到错误。
即使该语句可以编译,使用它也没有任何意义。 inputValidate()
自己读取 cin
,所以 player()
不应该试图将 inputValidate()
的 return 值传递给 cin >>
来开始和。 inputValidate()
会读入一个经过验证的数字,return 它,然后 player
会尝试读入一个新的未经验证的数字来覆盖它。
就此而言,传递 user_number
参数根本没有意义。您正在 按值 传递它,只是为了立即用用户输入覆盖它。所以 player()
传入的值是无关紧要的。如果你想 return
用户的输入,那么 user_number
应该是 inputValidate()
内部的局部变量。否则,它应该是 通过引用 传递的输出参数,而 inputValidate()
的 return 值应该是 void
.
此外,当 operator>>
由于输入无效而在 inputValidate()
内失败时,您不会丢弃导致它失败的输入。 cin.clear()
仅重置流的错误状态,不会丢弃任何数据。为此,您需要致电 cin.ignore()
。
话虽如此,试试这样的东西:
#include <iostream>
#include <string>
#include <vector>
#include <limits>
using namespace std;
...
int inputValidate(int lowest, int highest)
{
int user_number;
do
{
if (!(cin >> user_number))
{
cout << "Invalid. Enter a valid number: ";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
else if (user_number < lowest || user_number > highest)
{
cout << "Error. Enter a number from " << lowest << " to " << highest << ": ";
}
else break;
}
while (true);
return user_number;
}
void player(char array[][ROWS_AND_COLUMNS], char letter)
{
int row, column;
do
{
cout << "Enter player " << letter << ", row and column:";
row = inputValidate(1, 3) - 1;
column = inputValidate(1, 3) - 1;
if (array[row][column] == '*')
break;
cout << "Sorry, that spot is taken." << endl;
}
while (true);
array[row][column] = letter;
}